接口不是类,而是对希望满足这个接口的类的一组需求
-
接口中的所有方法都默认是public方法,接口中的字段总是默认是public static final,接口中不会实现方法,不会有实例字段,可以定义常量
pulic interface Abc { double SIZE = 100 ; //字段,常量 void getSize(); //方法 }
-
不能构造接口对象,但是能声明接口变量,并且接口变量必须引用实现了这个类的接口对象
//实现类 public clss B implements Abc { ... public void getSize(){ ... } } new Abc(); //error ABc abc = new B(); //ok
-
接口默认方法,需要实现
public interface Abc { default int getZero { return 0; } }
- 当接口中有一个默认方法getSize,而在超类中也有一个方法叫getSize,或者另一个接口中也有一个方法getSize,那么将会产生二义性
- 解决二义性的办法
- 超类优先,即忽略接口中的方法
- 当接口与接口产生冲突时,需要在实现类中重写这个方法
-
接口参数
-
某些泛型接口可以为其提供一个参数,我们知道所有的类都继承自Object,但是传入特定类时需要在实现时进行强制转化才能正常运行,因此我们可以在实现这个接口时传入参数
//不传参数 class Abc implments B { ... public int getInfo(Object o){ Abc a = (Abc) o ; ... } } //传入参数 class Abc implements B<Abc> { ... public int getInfo(Abc a){ ... } }
-
-
接口和抽象类的区别
- 接口可以扩展多个,抽象类扩展一个
pulbic interface Campus { ... } public abstract class School { ... } class Student implements Abc,Campus //ok class Student extends School //ok //继承类和扩展接口可以一起写 class Student extends School implements Campus