2021.4.27:接口

在抽象类中,抽象方法的本质是定义接口规范:规定高层类的接口,保证所有子类都有相同的接口实现。这样,多态就能发挥出威力。

如果一个抽象类没有属性,所有方法都是抽象方法

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

就可以把该抽象class改写为接口interface

声明

关键字:interface

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

说明

  • 所谓interface,是比抽象类还要抽象的纯抽象接口,因为它连属性都没有
  • 所有方法默认都是public abstract
  • 当一个class去实现interface时,需要使用implements关键字,且必须实现所有抽象方法
    class Student implements Person{
        private String name;
        public Student(String name){
            this.name=name;
        }
        public void run(){
            System.out.println(this.name+"run");
        }
        public String getName(){
            return this.name;
        }
    }
  • 一个class不能继承自多个类,但却可以实现多个interface
    class Student implements Person,Hello{
        ...
    }

     

接口继承

一个interface可以继承自另一个interface,关键字extends,相当于扩展了接口的方法。

interface Hello{
    void hello();
}
interface Person extends Hello{
    void run();
    String getName();
}

Person接口继承自Hello接口,因此,Person接口现在实际上有3个抽象方法。

 

之前我们讲过,可以定义抽象父类变量,来承接具体子类对象;在学了接口之后,我们可以更进一步,用接口变量,承接具体子类对象

//Person是一个接口
//Student是实现了接口Person的类
//class Student implements Person
Person p=new Student("Lee");
p.run();

以此实现了最高等级的多态。

 

default方法

default接口特有的修饰符,用default修饰接口的某个方法,相当于在接口中实现了一些方法,这些方法就要用default修饰:

public class Main {
    public static void main(String[] args) {
        Person p=new Student("Lee");
        p.run();

    }
}

interface Person{
    default void run(){
        System.out.println(getName()+" run");
    }
    String getName();
}

class Student implements Person{
    private String name;
    public Student(String name){
        this.name=name;
    }
    public String getName(){
        return this.name;
    }
}

实现类可以不覆写default方法;default方法的目的是,当我们需要给接口新增一个方法时,会涉及到修改全部子类。如果新增的是default方法,那么子类就不必全部修改,只需要覆写新增方法

default方法与抽象类的普通方法是不同的——因为接口没有属性,所以default方法无法访问属性,而抽象类普通方法可以访问属性

 

总结

  1. 接口没有属性只有抽象方法,比抽象类还抽象的构件;由于所有方法都是抽象方法,所以抽象方法的前缀public abstract可以省去
  2. interface定义接口;某类实现接口时,用关键字implements
    class A implements B{}
    一类不能继承自多个类,但可以继承自多个接口;继承类必须覆写所有抽象方法
  3. 接口可以继承自其他接口,用extends关键字
  4. 更高级的抽象:定义接口变量承接类对象
    interface A{}
    
    class B implements A{}
    
    A a = new B ();
  5. default接口特有方法,接口中用default修饰的方法需要在接口中实现。实现类可以不覆写default方法,其作用是免得在接口中添加方法而导致大量实现该接口类的失效。
  6. 接口中不能实例属性,但是可以有静态属性
posted @ 2021-04-27 21:45  ShineLe  阅读(31)  评论(0)    收藏  举报