接口细节
1.接口不可以被实例化(抽象)
2.接口中所有方法都是public方法,接口中抽象方法,可以不用abstract修饰
3.一个普通类实现接口,就必须将该方法将该接口的所有方法都实现
4.抽象类去实现接口时,可以不实现接口的抽象方法
5.一个类同时可以实现多个接口
6.接口中的属性,只能是final的,而且是public static final 修饰符
7.接口不能继承其他类,但是可以继承多个其它接口
8.接口的修饰符只能是public 和 默认 ,这点和类的修饰符是一样的
Extends VS Interface
-
当子类继承了父类,就自动的拥有了父类的功能
-
如果子类需要拓展功能,可以通过实现接口的方式来进行拓展
-
可以理解为 实现接口 是对 java 单继承机制的一种补充
example:
class LittleMonkey extends Monkey implements Fish,Bird{ //小猴子继承父类之后还可以拓展Fish,Bird能力 }
接口的多态
-
接口类型的变量可以指向 实现了该接口的对象实例
假如现在有两个接口(IG,IH)和一个类(Test)
- 如果IG继承了IH接口
- 而Test类实现了IG接口
- 那么,实际上就相当于Test类也实现了IH接口
-
这就是所谓的 接口多态传递现象…
接口入门
package com.xz.interface_;
public interface AInterface {
//写属性
public int n1 = 10;
//写方法
//在接口中,抽象方法,可以省略abstract关键字
public void hi();
//在jdk8后,可以有默认实现方法,需要使用default关键字修饰
default public void ok() {
System.out.println("ok...");
}
//在jdk8之后可以有静态方法
public static void cry() {
System.out.println("cry...");
}
}
简易案例
package com.xz.interface_;
public class Interface01 {
public static void main(String[] args) {
//创建手机和相机对象
Phone phone = new Phone();
Camera camera = new Camera();
//创建computer对象
Computer computer = new Computer();
computer.work(phone);
computer.work(camera);
}
}
package com.xz.interface_;
public interface UsbInterface {
public void start();
public void stop();
}
package com.xz.interface_;
public class Computer {
public void work(UsbInterface usbInterface){
//通过接口来调用方法
usbInterface.start();
usbInterface.stop();
}
}
package com.xz.interface_;
public class Camera implements UsbInterface{
@Override
public void start() {
System.out.println("相机开使工作...");
}
@Override
public void stop() {
System.out.println("相机结束工作...");
}
}
package com.xz.interface_;
public class Phone implements UsbInterface {
@Override
public void start() {
System.out.println("手机开使工作...");
}
@Override
public void stop() {
System.out.println("手机结束工作...");
}
}