interface中的default关键字

  1. interface是更高级的抽象类
  2. interface中的default关键字

interface是更高级的抽象类

可以把interface理解为纯度更高的抽象类,接口中不能定义实例属性且要求所有方法都是public abstract的。

如下就是接口,但是默认接口都是抽象的,接口方法都是 public abstract 的,所以写出这些关键字是多余的。

abstract interface Person {
    public abstract void run();
    public abstract String getName();
}

去掉默认的多余关键字,如下:

interface Person {
    void run();
    String getName();
}

一般使用高层的接口去接收实现接口的实例对象,如下:

List list = new ArrayList();    //    用List接口接收具体子类的实例

接口中不能定义实例属性,也不需要,因为接口本来就是专门用于存放方法的定义,所以下面写法是错误的

interface Person {
    int age ;

    void run();
}

接口无法存放实例属性,但是可以存储对外开放的静态常量(static修饰的表示属于类而非实例,也就是多个实例共享;final修饰则不可修改,表示常量)。这种应用场景并不多见,用法如下所示:

interface Person {
    // 编译器会自动加上public statc final:
    int MALE = 1;
    int FEMALE = 2;

    void run();
}

class Student implements Person{
    private String name;

    public Student(String name) {
        this.name = name;
    }

    @Override
    public void run() {
        System.out.println("Student run");
    }
}

class Teacher implements Person{
    private String name;

    public Teacher(String name) {
        this.name = name;
    }

    @Override
    public void run() {
        System.out.println("Teacher run");
    }
}

public class Hello {
    public static void main(String[] args) {
        System.out.println(Person.MALE);    //    1
        System.out.println(Person.FEMALE);    //    2
    }
}

interface中的default关键字

接口中一般只能存放方法的定义,强制子类去实现接口方法。但是如果存在这样的方法,所有子类对它的实现都是一样的,也就是在子类中不需要去复写该方法,我们可以把它的实现写在接口中,不过需要使用interface中的default关键字修饰。

interface Person {
    void run();

    default void actual(){
        System.out.println("Whatever my profession, I am a human.");
    }
}

class Student implements Person{
    private String name;

    public Student(String name) {
        this.name = name;
    }

    @Override
    public void run() {
        System.out.println("Student run");
    }
}

class Teacher implements Person{
    private String name;

    public Teacher(String name) {
        this.name = name;
    }

    @Override
    public void run() {
        System.out.println("Teacher run");
    }
}

public class Hello {
    public static void main(String[] args) {
        Person s1 = new Student("小明");
        Person t1 = new Teacher("林老师");
        s1.run();    //    Student run
        s1.actual();    //    Whatever my profession, I am a human.
        t1.run();    //    Teacher run
        t1.actual();    //    Whatever my profession, I am a human.
    }
}

他の者にできたか?ここまでやれたか?この先できるか?いいや、仆にしかできない!

目录
×

喜欢就点赞,疼爱就打赏