一、引入
接口就是规范,定义的是一组规则
继承是一个“是不是”的关系,而接口是一个“能不能”的关系
接口的本质是契约、标准、规范
二、如何定义接口
1、JDK8之前
全局常量:public static final 可以省略不写
抽象方法:public abstract
2、JDK8之后
全局变量
抽象方法
默认方法
静态方法
JDK8之后,接口中除了能定义全局常量、抽象方法、还可以定义静态方法、默认方法。
interface A{
//常量 前面省略public static final
int a;
//抽象方法 前面省略public abstract
void method1();
//静态方法
public static void method2(){
System.out.println("接口中的静态方法")
}
//默认方法
public default void method3(){
System.out.println("接口中的默认方法")
}
}
说明
-
接口中定义的静态方法,只能通过接口调用
-
接口中定义的默认方法可以被实现类重写,用实现类的对象调用
-
类优先原则—如果子类(实现类)继承的父类和实现的接口有同名同参的方法,那么子类在没有重写此方法的情况下,默认调用的是父类同名同参的方法
-
接口冲突—如果实现类实现了多个接口,并且多个接口之间有同名同参的默认方法,那么在实现类没有重写该方法的情况下,会报错
解决方法是必须重写
三、接口的特点
-
接口中不能定义构造器,定义的报错报错信息时
Interfaces cannot have constructors意味着接口不能实例化
-
开发中,接口通过让类实现的方式使用,
类实现接口后,只能实现接口的所有抽象方法,或者将此类声明为抽象类。否则会报错
-
Java中类可以实现多个接口,弥补了类单继承的局限性
举例包装类的声明格式
public final class Integer extends Number implements Comparable<Integer>
-
类和类之间的关系是继承
类和接口之间的关系是实现
接口和接口之间的关系是继承
-
接口的使用体现多态性
public class USBTest {
public static void main(String[] args) {
Computer com = new Computer();
USB flash = new Flash();
com.tranfferDate(flash);
}
}
class Computer{
public void tranfferDate(USB usb) {
usb.start();
System.out.println("传输细节");
usb.stop();
}
}
interface USB{
void start();
void stop();
}
class Flash implements USB{
@Override
public void start() {
System.out.println("Flash开始传输数据");
}
@Override
public void stop() {
System.out.println("Flash停止传输数据");
}
}