java中的接口interface

  1. 接口声明格式:interface xxx {}

  2. 接口使用方法

    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");
    	}
    }
    
  3. 说明
    ① 接口与类的关系:实现关系
    ② 接口与接口的关系:多继承关系

    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();

  4. 接口多态性的举例

    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结束传输数据");
    	}
    }
    
  5. 接口与抽象类的区别

    共同点
    ① 都可以声明抽象方法
    ② 都不可以实例化对象

    不同点
    ① 抽象类中可以声明常量、变量、代码块、构造器、普通方法、抽象方法,接口中只能声明常量、抽象方法、静态方法、默认方法
    ② 抽象类与类是继承的关系;接口与类是实现的关系

  6. JDK8、9接口新特性
    ① 在接口中可以声明静态方法,但是静态方法只能被接口类直接调用 public static void method() {}
    ② 在接口中可以声明默认方法,可以被实现类对象调用 public default void method() {}
    ③ 如果一个实现类继承了多个接口,并且不同接口中存在同名同参数的方法,在实现类不重写该方法的情况下,会报错“接口冲突”,只有在实现类中重写该方法,才不会报错。
    ④ 当子类继承了父类并实现了接口,在父类和接口中定义了同名同参数的方法(接口中的是默认方法),当在子类中没有重写此方法的情况下,会根据类优先原则,执行父类的方法。
    ⑤ 如何在子类中调用父类或接口中被重写的方法?super.method(); or Interface.super.method();
    ⑥ 在接口中可以声明私有方法,只能在接口内部使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值