zoukankan      html  css  js  c++  java
  • Java基础00-接口21

    1. 接口

    1.1 接口概述

     

    1.2 接口的特点

     

    1.3 接口的成员特点

     

    1.3.1 案例:猫和狗

    public interface Jumpping {
        public void jump();
    }
    public abstract class AnimalJumpping {
        private String name;
        private int age;
    
        public void setName(String name){
            this.name=name;
        }
    
        public String getName(){
            return name;
        }
    
        public void setAge(int age){
            this.age = age;
        }
    
        public int getAge(){
            return age;
        }
    
        public AnimalJumpping(){
            System.out.println("抽象类无参构造方法");
        }
    
        public AnimalJumpping(String name, int age){
            System.out.println("抽象类有参构造方法");
        }
    
        public abstract void eat();
    }
    public class CatExtendsImplementsJumpping extends AnimalJumpping implements Jumpping {
    
        public CatExtendsImplementsJumpping(){
            super();
            System.out.println("猫的无参构造方法");
        }
    
        public CatExtendsImplementsJumpping(String name, int age){
            super(name, age);
            System.out.println("猫的有参构造方法");
        }
    
        public void eat(){
            System.out.println("猫吃鱼");
        }
    
        public void jump(){
            System.out.println("猫跳高");
        }
    }
    public class AnimalDemoExtendsImplementsJumpping {
    public static void main(String[] args) {
    CatExtendsImplementsJumpping c= new CatExtendsImplementsJumpping();
    c.eat();
    c.jump();

    Jumpping cc= new CatExtendsImplementsJumpping("catA",15);
    cc.jump();

    AnimalJumpping ccc = new CatExtendsImplementsJumpping("catB",8);
    ccc.eat();
    ccc.getName();
    ccc.getAge();
    }
    }

    输出:

    抽象类无参构造方法
    猫的无参构造方法
    猫吃鱼
    猫跳高
    抽象类有参构造方法
    猫的有参构造方法
    猫跳高
    抽象类有参构造方法
    猫的有参构造方法
    猫吃鱼

    1.4 类和接口的关系

    继承类、实现接口

     

    1.5 抽象类和接口的区别


    例子:

    门和警报的例子


    随着时代的发展,门具备了报警的功能,那该怎么写那?
    第一种方案:
    将3个功能都放在抽象类里面,
    但在这样一来所有继承抽象类的门就都有了报警功能,现实中是不可能所有的门都具备报警功能的,所以这样的写发是不成立的。

    第二种方法:
    将3种功能都写在接口中,
    但是继承接口的门必须都将接口中的方法实现,有的门并不具备报警功能,所以这样写也是不成立的。

    最好的设计方法:

    因为开和关都是门的基本动作,而报警功能的门附带的功能,并不是每个门都有这样的功能。

    所以我们将开和关的都放在抽象类中,门继承的时候就会有开和关的动作,而将报警功能放在接口中,如果有门有报警的功能就实现它的,没有就不实现它。

    由此可见,抽象类是对事物的抽象,而接口是对行为的抽象。

    抽象类中应该存放的是子类共同的特征,
    比如,人都要吃饭,睡觉,
    而接口存放的是子类之间不同的特性,
    比如,有的人是男人,有的人是女人。

    1.5.1 案例


    代码思路:

    一. 定义3个抽象类有一个接口类:

      1. 定义一个说英语的接口:
        因为并不是每个人都要学习英语,所以将说英语定义为一个接口。

        

      2. 定义一个抽象人类

        每个人都有姓名和年龄的特征和吃饭的行为,所以将他们定义在抽象类中。

        

      3. 定义一个教练抽象类,并继承抽象人类

        每个教练都要会教东西,所以他要有teach方法。

        

       4. 定义抽象运动员类,继承人类
        每个运动员都要会学习东西,所以他要有study方法。

        

    二. 定义4个具体类:
    定义具体篮球教练类,继承教练类

    重写教练类的teach(),和人类的eat()方法。
    因为教练都必须会教东西,和吃饭。

    定义具体乒乓球教练类,继承教练类,实现说英语接口

    继承教练类并重写它的方法,同时乒乓球教练也有他的特性,就是会说英语,所以他要实现SpeakEnglish接口。

    定义具体篮球运动员类,继承运动员类构造方法: 无参,带参,成员方法,重写吃饭,重写学习


    定义具体乒乓球运动员类,继承运动员类,实现说英语接口,构造方法:无参,带参,成员方法,重写吃饭,重写学习,重写说英语

    因为和乒乓球有关的人员都要会说英语,所以乒乓球运动员也要实现说英语的接口。

    测试类:

    运行结果:

    以上也可以通过有参构造方法的方式编译运行。

    教练对象的创建和使用和以上是一模一样的。

  • 相关阅读:
    设计模式:观察者模式
    设计模式:享元模式
    面试题:redis主从数据库不一致如何解决?
    面试题:Object obj = new Object()这句话在内存里占用了多少字节
    面试题:AtomicInteger和LongAdder区别
    @PrePersist 注解
    树莓派 zero w 添加微雪墨水屏 显示天气
    数据仓库项目中的数据建模和ETL日志体系
    TO B业务的发展
    Kylin、Druid、ClickHouse核心技术对比
  • 原文地址:https://www.cnblogs.com/ajing2018/p/14666573.html
Copyright © 2011-2022 走看看