接口:Java提供了一个关键字interface,用这个关键字我们可以定义出一个特殊的结构:接口
public interface 接口名{
// 成员变量(常量)
// 成员方法(抽象方法)}(只能有这两种成分)
**注意:**接口不能创建对象;接口是用来被类实现(implements)(理解成继承)的,实现接口的类叫实现类(理解成子类)
修饰符 class 实现类 implements 接口1,接口2,接口3 …{}
一个类可以以实现多个接口(接口理解成干爹),实现类实现多个接口,必须重写接口的全部抽象方法,否则实现类需要定义成抽象类
接口的好处:
1)可以解决类单继承的问题,通过接口,我们可以让一个类有一个亲爸的同时,找若干个干爹去扩展自己的功能。
原因:通过接口找干爹,可以在implements上显性的知道你是谁
2)一个类可以实现多个接口,一i个接口也可被多个类实现,这样就可以面向接口编程了。
接口jdk8
后新增的方法
1,私有方法和默认方法默认被public修饰:接口是用来被调用的,需要暴露。
2,维护成本降低,接口能力增强。
3,三种方法:
public interface A{
//1,默认方法(实例方法):使用default修饰,默认会被加上public修饰。注意:只能使用接口的实现类对象调用
default void test1(){
...
}
//2,私有方法:必须用private修饰(jdk9开始支持)
private void test2(){}
// 3,类方法(静态方法):使用static修饰,默认会被加上public修饰 。注意:只能用接口名来调用。
static void test3(){}
}
接口的其他细节
1,接口的多继承:一个接口可以同时继承多个接口
public interface C extends B,A{}
作用:便于实现类去实现。
2,(了解)
一个接口要继承多个接口,不能存在多个接口存在方法签名冲突,否则不能多继承。
interface I{void test();}
interface J{String test();}
// interface K extends I,J{} // 报错
一个类实现多个接口,就不能有多个接口存在方法签名冲突,否则不能多实现。
class E implements I,J{} // 报错
一个类继承了父类,又实现了接口,父类和接口中有同名的默认方法,优先实现父类。
一个类实现了多个接口,多个接口存在同名默认方法,可以不冲突,只需该类重写该方法即可。