1. 接口概述
(1) Java提供了一个关键字 interface,用这个关键字可以定义接口;
(2)格式: public interface 接口名{
//成员变量(常量)
//成员方法(抽象方法)
}
public interface A {//成员变量(接口默认为常量-public static final)String NAME = "卡莎";//成员方法(接口默认为抽象方法-public abstract)void show();}
2. 接口实现
(1) 接口不能创建对象;接口是用来实现的(implements),实现接口的类被称为实现类
(2)格式:修饰符 class 实现类名 implements 接口1, 接口2...{
........
}
(3) 一个类可以实现多个接口,实现类实现多个接口,必须重写完全部接口的全部抽象方法,否则实现类需要定义成抽象类
//接口B
public interface B {void method();void method2();
}//接口C
public interface C {void m1();void m2();
}//实现类D 实现接口B C 则必须实现全部的抽象方法
public class D implements C,B{@Overridepublic void method() {}@Overridepublic void method2() {}@Overridepublic void m1() {}@Overridepublic void m2() {}
}public static void main(String[] args) {D d = new D();d.m1();d.m2();d.method();d.method2();}
3. 使用接口的好处
(1) 弥补了类单继承的不足,一个类可以同时实现多个接口。
(2) 让程序可以面向接口编程,灵活方便的实现业务
4. 接口中新增的三种方法
JDK8开始,接口中新增的三种方法:增强接口的能力,便于项目的扩展和维护
//接口A
public interface A {/** 第一种方法:默认方法-必须使用default修饰,默认会被public修饰* 有方法体,实例方法:对象的方法,必须使用对象来访问* */default void show(){System.out.println("默认方法");//访问私有方法show2();}/** 第二种方法:私有方法:必须使用private修饰(JDK9开始)* 有方法体,实例方法:对象的方法,可以在本类中的的其他默认方法或私有方法中访问* */private void show2(){System.out.println("私有方法");}/** 第三种方法:静态方法:必须使用static修饰,默认会被public修饰* 有方法体,可以使用接口名.静态方法 来调用 如 A.show3()* */static void show3(){System.out.println("静态方法");}}//类B实现接口A
public class B implements A {}public class Test {public static void main(String[] args) {// 1.默认方法B b = new B();b.show();//3.调用静态方法A.show3();}
}
5. 接口的多继承
一个接口可以同时继承多个接口:便于实现类实现
格式: public interface C extends B,A{.....}
public interface A {void method();
}public interface B {void method2();
}public interface C {void method3();
}public interface D extends A,B,C{}public class E implements D{//重写接口A中的抽象方法@Overridepublic void method() {}//重写接口B中的抽象方法@Overridepublic void method2() {}//重写接口C中的抽象方法@Overridepublic void method3() {}
}
6. 接口使用的注意事项
(1) 一个接口继承多个接口,如果多个接口中存在方法名冲突,则此时不支持多继承
(2) 一个类实现多个接口,如果多个接口中存在方法名冲突,此时不支持多实现
(3) 一个类继承了父类,又同时实现了接口,父类中和接口中用同名的默认方法,实现会优先使用父类的
(4) 一个类实现类多个接口,多个接口中存在同名的默认方法,可以不冲突,这个类重写该方法即可