接口就是规范
一个类可以实现多个接口
一定程度上弥补了类单继承的局限性
类必须实现接口中所有的抽象方法, 才能实例化,否则此实现类必须声明为抽象类
接口可以多继承接口
内部结构
属性必须使用public static final修饰
可以省略
不可以声明构造器、代码块
声明方法
jdk8之前,需要声明为抽象方法,修饰符为public abstract
可能省略
jdk8允许声明静态方法、默认方法
可以有方法体
接口中定义的静态方法只能被接口调用,不是使用实现类调用
默认方法
public defaule void aa() {
}
可以被实现类继承与重写
实现类继承后没有重写时调用的是接口的方法,实现类重写后调用的是重写后的方法
当类实现的两个接口中定义了同名同参数的默认方法,则实现类在没有重写默认方法的情况下实现类对象调用会报错;实现类必须重写接口中定义的默认方法
类继承了父类并实现了接口,父类与接口中定义了同名同参数的默认方法;默认情况在,类在没有重写此方法时,类的对象调用的是父类中的方法(类优先原则)
当类实现的两个接口中定义了同名同参数的默认方法,实现类中调用指定接口中的方法
接口.super.方法名()
jdk9允许声明私有方法
只允许在接口内部使用
定义
interface Flyable {
public static final int MIN = 0;
public abstract void fly();
}
public class Bullet implements Flyable {
@Override
fly(){
}
}
多态
接口 变量名 = new 实现类对象()
和抽象类对比
共性
都可以声明抽象方法
都不能实例化
不同
抽象类一定有构造器、接口没有构造器
类与类之间是继承关系,类与接口是实现关系,接口与接口之间是多继承关系