接口的使用
-
接口使用interface来定义
-
java中,接口和类是并列的两个结构
-
如何定义接口:定义接口中的成员
1.JDK7及以前:只能定义全局常量和抽象方法
//全局常量:public static final的,但是书写时,可以省略不写
//全局常量
public static final int MAX_SPEED =7900;//第一宇宙速度
//省略了public static final
int MIN_SPEED=7900;
//抽象方法:public abstract的
//抽象方法
public abstract void stop ();
//省略了public abstract
void stop();
2.JDK8:除了定义全局常量和抽象方法之外,还可以定义静态方法、默认方法
- 接口中不能定义构造器的!意味着接口不可以实例化
- Java开发中,接口通过让类去实现(implements)的方式来使用.
-如果实现类覆盖了接口中的所有抽象方法,则此实现类就可以实例化
- 如果实现类没有覆盖接口中所有的抽象方法,则此实现类仍为一个抽象类
Java类可以实现多个接口 —>弥补了Java单继承性的局限性
//格式:
class AA extends BB implements CC,DD,EE
- 接口与接口之间可以继承,而且可以多继承
- 接口的具体使用,体现多态性
- 接口,实际上可以看作一种规范
2.1定义静态方法和默认方法
-
接口中定义的静态方法,只能通过接口来调用。
-
通过实现类的对象,可以调用接口中的默认方法。
- 如果实现类重写了接口中的默认方法,调用时,仍然调用的是重写以后的方法
-
如果子类(或实现类)继承的父类和实现的接口中声明了同名同参数的默认方法.
- 那么子类在没有重写此方法的情况下,默认调用的是父类中的同名同参数的方法。->类优先原则
-
如果实现类实现了多个接口,而这多个接口中定义了同各同参数的默认方法,/那么在实现出沿有重写此方法的情况下,报措,->接口冲突
-
如何在子类(或实现类)的方法中调用父类、接口中被重写的方法
public void myMethod(){
method3();//调用自己定义的重写的方法
super.method3();//调用的是父类中声明的
//调用接口中的默认方法
CompareA.super.method3();
CompareB.super.method3();
}
3.接口和抽象类区别
-
接口是要被实现的,抽象类是要被继承的。
-
接口只能做方法的声明,抽象类中可以作为方法的声明,也可以做方法的实现。
-
接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量
-
类可以实现多个接口,弥补了但单继承性的局限性。