概述
接口实际不是类,类是由Class定义,而接口是以interface定义的。
更抽象的抽象类,只有常量和抽象方法
定义的是一种准入规范
接口可以通过(多)继承来实现准入规范的累加
一个类可以实现多个接口
接口属性默认为public static final,即把它们定义为常量,防止继承的不同接口中出现同名变量,防止继承的子类对常量进行更改(因为接口本身就是一种规范,要是常量还能被修改那它还定义这个常量干什么)
接口方法默认为public abstract
实现接口的类里也可以有自己的方法
接口只能用public和default修饰,后者表示只能在本包写一个类去implement,包外则不能implement。不能用private是因为只能由自身去访问的接口无意义;不能用protected是因为它只比default多出包外的子类可以去访问,但接口并没有任何子类(子接口不叫子类,也不需要访问父接口的方法),所以也无意义。
在接口中定义的内部类好像必须是静态的,或者是静态类型的,比如枚举类。
很多人习惯在接口名前加一个“I”,表示interface
接口不可以被new但是接口数组可以被new,比如,Comparable是一个接口,Comparable[] a=new Comparable[n]; (√)
统一访问:在创建对象的时候用接口创建,【接口名】 【对象名】= new 【实现接口的类】,这样你想用哪个类的对象就可以new哪个对象了,不需要改原来的代码。如果要写两个都有method1方法的类,如果用接口,就可以直接对象.method1();这样,new a()就是用a的方法,new b()就是用b的方法。
曲线实现多重继承:java不支持多重继承但是可以实现多个接口,这个在某种程度上可以看成是多重继承的一种方法。
项目开发便利:接口里是一些公用的东西,大家都去实现它的话比每次重新定义要方便。比如,开发时遇到客户改需求,多人修改代码导致牵连,如果使用接口,只需要重新写它的实现类即可。默认方法
Java8新特性:允许给接口添加一个|多个已经实现的方法,只需使用default定义即可,这个特征又叫做扩展方法
public interface Formula {
default double sqrt(int a){
return Math.sqrt(a);
}
double calculate(int a);
}
实现Formula接口的子类需要重写calculate方法(当然,想要重写sqrt方法也可以),而sqrt则可以直接使用
public static void main(String[] args) {
//这里不采用子类实现接口,而是直接在实例化的时候重写方法
Formula formula = new Formula() {
@Override
public double calculate(int a) {
return sqrt(a*100);
}
};
formula.sqrt(100);
formula.calculate(100);
}
最后更新时间:2019-05-03 17:08:18
这里可以写作者留言,标签和 hexo 中所有变量及辅助函数等均可调用,示例:
http://47.107.237.149/2019/04/30/接口interface/