-
接口声明格式:
interface xxx {}
-
接口使用方法
interface Flyable { // 属性,默认省略了public static final,全局常量 int MIN_SPEED = 0; int MAX_SPEED = 100; // 方法。默认省略了public abstract,抽象方法 void fly(); } class Test extends superClass implements Flyable, B, C { public void fly() { System.out.println("在实现类Test中实现具体的抽象方法fly"); } }
-
说明
① 接口与类的关系:实现关系
② 接口与接口的关系:多继承关系interface A { void method1(); } interface B { void method2(); } interface C extends A, B { void method3(); } class D implements C { // 在实现类中需要将接口A、B、C中的方法都实现才可 public void method1() {} public void method2() {} public void method3() {} }
③ 上述举例中的Test是superClass的子类,是接口Flyable、B、C的实现类
④ 接口本质上就是定个规范,在具体的实现类中去实现
⑤ 类只能有一个父类,但是可以实现多个接口,一定程度上弥补了类单继承的局限性
⑥ 类必须将实现的接口中的所有抽象方法重写,才可以实例化,否则,此实现类必须声明为抽象类
⑦ 接口也有多态性,格式:接口名 xx = new 实现类();
举例:Flyable b = new Test();
-
接口多态性的举例
public class Test { public static void main(String[] args) { Computer computer = new Computer(); // 创建接口实现类的对象 Printer p = new Printer(); computer.transferData(p); // 创建接口实现类的匿名对象 computer.transferData(new Camera()); // 创建接口匿名实现类的对象 USB u = new USB(){ public void start() { System.out.println("U盘开始传输数据"); } public void stop() { System.out.println("U盘结束传输数据"); } }; computer.transferData(u); // 创建接口匿名实现类的匿名对象 computer.transferData(new USB(){ public void start() { System.out.println("扫描仪开始传输数据"); } public void stop() { System.out.println("扫描仪结束传输数据"); } }); } } interface USB { void start(); void stop(); } class Computer { // 参数声明USB类型,体现多态 public void transferData(USB usb) { System.out.println("连接成功"); usb.start(); System.out.println("传输结束"); usb.stop(); } } class Printer implements USB{ public void start() { System.out.println("printer开始传输数据"); } public void stop() { System.out.println("printer结束传输数据"); } } class Camera implements USB{ public void start() { System.out.println("camera开始传输数据"); } public void stop() { System.out.println("camera结束传输数据"); } }
-
接口与抽象类的区别
共同点
① 都可以声明抽象方法
② 都不可以实例化对象不同点
① 抽象类中可以声明常量、变量、代码块、构造器、普通方法、抽象方法,接口中只能声明常量、抽象方法、静态方法、默认方法
② 抽象类与类是继承的关系;接口与类是实现的关系 -
JDK8、9接口新特性
① 在接口中可以声明静态方法,但是静态方法只能被接口类直接调用public static void method() {}
② 在接口中可以声明默认方法,可以被实现类对象调用public default void method() {}
③ 如果一个实现类继承了多个接口,并且不同接口中存在同名同参数的方法,在实现类不重写该方法的情况下,会报错“接口冲突”,只有在实现类中重写该方法,才不会报错。
④ 当子类继承了父类并实现了接口,在父类和接口中定义了同名同参数的方法(接口中的是默认方法),当在子类中没有重写此方法的情况下,会根据类优先原则,执行父类的方法。
⑤ 如何在子类中调用父类或接口中被重写的方法?super.method();
orInterface.super.method();
⑥ 在接口中可以声明私有方法,只能在接口内部使用
java中的接口interface
于 2024-07-12 17:47:09 首次发布