-
java只支持单继承 接口是为了弥补这个单继承.接口是一个非常特殊的抽象类
-
接口的理解:接口的本质是契约、标准、规范,就像我们的法律一样。制定好后大家都要遵守。
-
定义接口的关键字:interface
-
接口内部结构的说明:
- 可以声明:
- 属性:必须使用public static final修饰
- 方法:
jdk8之前:声明抽象方法,修饰为public abstract
jdk8:声明静态方法、默认方法
jdk9:声明私有方法
- 不可以声明:
- 构造器、代码块等
-
接口与类的关系:实现关系
-
格式:
class A extend SuperA implements B,C{}
A相较于SuperA来讲,叫做子类
A相较于B、C来讲,叫做实现类
- 满足此关系之后,说明:
类可以实现多个接口。
类针对于接口的多实现,一定程度上就弥补了类的单继承的局限性。
类必须将实现的接口中的所有的抽象方法都重写(或实现),方可实例化。否则,此实现类必须声明为抽象类。
-
接口与接口的关系:继承关系,且可以多继承
-
接口的多态性: 接口名 变量名 = new 实现类对象;
public class USBTest {
public static void main(String[] args) {
//! 接口实现类对象的四种方法
// 1.创建接口实现类的对象
computer c = new computer();
print p = new print();
c.Use(p);
// 2. 创建接口实现类的匿名对象
System.out.println();
c.Use(new camera());
// 3. 创建接口匿名实现类的对象
System.out.println();
USB usb1 = new USB() {
@Override
public void ing() {
System.out.println("正在使用U盘");
}
@Override
public void stop() {
System.out.println("U盘使用完毕");
}
};
c.Use(usb1);
// 4. 创建接口匿名实现类的匿名对象
System.out.println();
c.Use(new USB() {
@Override
public void ing() {
System.out.println("正在使用扫描仪");
}
@Override
public void stop() {
System.out.println("扫描仪使用完毕");
}
});
}
}
class computer{
void Use(USB usb){
System.out.println("设备准备就绪");
usb.ing();
System.out.println("设备传输完毕");
usb.stop();
}
}
// 接口
interface USB{
public abstract void ing();
void stop();
}
// 类调用接口
class print implements USB{
@Override
public void ing() {
System.out.println("正在使用打印机");
}
@Override
public void stop() {
System.out.println("打印机使用完毕");
}
}
// 类调用接口
class camera implements USB{
@Override
public void ing() {
System.out.println("正在使用相机");
}
@Override
public void stop() {
System.out.println("相机使用完毕");
}
}