接口

接口(interface)

接口和类是并列的结构

定义接口

  • 定义全局常量

    static final书写时可以省略不写

  • 定义抽象方法

    abstract书写时可以省略

  • 接口中不能定义构造器

    接口不可以实例化

使用

  • 接口通过让类来实现(implements)的方式来使用
  • 如果实现类覆盖了接口中所有的抽象方法,则此实现类可以实例化
  • 如果实现类没有覆盖接口中所有的抽象方法,则此实现类仍为一个抽象类
  • 接口和抽象是实现,继承是重写

示例

public class Test {
    public static void main(String[] args) {
        Man man = new Man();
        System.out.println(Man.name);
        System.out.println(Man.age);
        man.show();
    }
}

interface Person{
    String name = "殷志源";
    int age = 42;
    void show();
}

class Man implements Person {

    @Override
    public void show() {
        System.out.println("上台表演");
    }
}

运行结果

类可以实现多个接口(多实现)

  • 弥补了Java类单继承性的局限问题
  • 格式:class AA extends BB implements CC,DD,EE{}
    • 实现多个接口时,多个接口之间用逗号隔开
    • 先写继承再写接口实现​
class Woman extends Animal implements Person{

    @Override
    void eat() {
        System.out.println("女孩子喜欢喝奶茶");
    }

    @Override
    public void show() {
        System.out.println("女孩子喜欢看爱豆表演");
    }
}

注意

  1. 接口与接口之间可以继承,而且可以多继承
  2. 具体使用体现多态性
  3. 接口实际上可以看作是一种规范

接口匿名实现类的对象

  • 创建接口的非匿名实现类的非匿名对象
  • 创建接口的非匿名实现类的匿名对象
  • 创建接口的匿名实现类的非匿名对象
  • 创建接口的匿名实现类的匿名对象

新特性(jdk8)

除了定义全局常量和抽象方法之外,还可以定义静态方法、默认方法

  • 静态方法

    接口中定义的静态方法只能通过接口调用

  • 默认方法

    1. 通过实现类的对象,可以调用接口中的默认方法
    2. 如果实现类重写了接口中的默认方法,调用时,仍然调用的是重写后的方法

类优先原则

  • 如果实现类(子类)继承的父类和实现的接口中声明了同名同参数的方法,那么子类在没有重写此方法的情况下,默认调用的是父类中同名同参数的方法

  • 如果实现类实现了多个接口,而多个接口中定义了同名同参数的默认方法,那么在实现类没有重写此方法的情况下,报错(接口冲突)

    若还想实现两接口,那么要求必须在实现类中重写此方法

posted @ 2020-06-22 23:58  南煎丸子  阅读(141)  评论(0)    收藏  举报