接口的使用
1. 接口的理解:接口的本质是契约、标准、规范,就像我们的法律一样。制定好后大家都要遵守。
2. 定义接口的关键字:interface
3. 接口内部结构的说明:
> 可以声明:
属性:必须使用public static final修饰
方法:jdk8之前:声明抽象方法,修饰为public abstract
jdk8:声明静态方法、默认方法
jdk9:声明私有方法
> 不可以声明:构造器、代码块等
4. 接口与类的关系 :实现关系
5. 格式:class A extends SuperA implements B,C{}
A相较于SuperA来讲,叫做子类
A相较于B,C来讲,叫做实现类。
6. 满足此关系之后,说明:
> 类可以实现多个接口。
> 类针对于接口的多实现,一定程度上就弥补了类的单继承的局限性。
> 类必须将实现的接口中的所有的抽象方法都重写(或实现),方可实例化。否则,此实现类必须声明为抽象类。
7. 接口与接口的关系:继承关系,且可以多继承
8. 接口的多态性: 接口名 变量名 = new 实现类对象;
9. 面试题:区分抽象类和接口
> 共性:都可以声明抽象方法
都不能实例化
> 不同:① 抽象类一定有构造器。接口没有构造器
② 类与类之间继承关系,类与接口之间是实现关系,接口与接口之间是多继承关系
public class USBTest {
public static void main(String[] args) {
//1.创建接口实现类的对象
Computer computer = new Computer();
Printer printer = new Printer();
computer.transferData(printer);
//2.创建接口实现类的匿名对象
computer.transferData(new Camera());
System.out.println();
//3.创建接口匿名实现类的对象
USB usb1 = new USB(){
public void start(){
System.out.println("U盘开始工作");
}
public void stop(){
System.out.println("U盘结束工作");
}
};
computer.transferData(usb1);
//4. 创建接口匿名实现类的匿名对象
computer.transferData(new USB(){
public void start(){
System.out.println("扫描仪开始工作");
}
public void stop(){
System.out.println("扫描仪结束工作");
}
});
}
}
class Computer{
public void transferData(USB usb){ //多态:USB usb = new Printer();
System.out.println("设备连接成功....");
usb.start();
System.out.println("数据传输的细节操作....");
usb.stop();
}
}
class Camera implements USB{
@Override
public void start() {
System.out.println("照相机开始工作");
}
@Override
public void stop() {
System.out.println("照相机结束工作");
}
}
class Printer implements USB{
@Override
public void start() {
System.out.println("打印机开始工作");
}
@Override
public void stop() {
System.out.println("打印机结束工作");
}
}
interface USB{
//声明常量
//USB的长、宽、高、...
//方法
public abstract void start();
public abstract void stop();
}