接口
很多人纳闷Java为什么会有接口这个知识点呢?其实很大程度上是为了间接实现多继承。但是因为C++的多继承实在是一个难点,Java为了吸取C++的教训,就推出了接口这个概念。接口是一种公共规范标准。
接口中可以包含哪些数据类型呢?
- 常量。
- 抽象方法。
- 默认方法。(jdk 1.8新增)
- 静态方法。(jdk1.8新增)
- 私有方法。(jdk 9新增)
接口注意事项
- 接口是一种引用数据类型。
- 接口编译完成后仍然对应的是.class文件。
- 类中实现接口用 implements 关键字实现。
- 接口与接口之间是多继承关系,如果重复默认方法,需要覆盖重写。
- 接口中抽象方法固定的两个关键字是 public abstract,但是可以省略不写。
- 接口中默认方法固定的两个关键字是 public default,默认方法中需要实现方法体。
- 接口中静态方法固定的两个关键字是 public static,静态方法中需要实现方法体,且必须使用接口直接调用,不能通过实现类对象调用。
- 接口中可以定义“成员变量”,但是必须标明是 public static final 三个关键字进行修饰。所以从效果上看,被称为常量。只能通过接口直接点,不可以用实现类的对象点。
- 接口当中的常量必须赋值,且建议大写,用下划线分割多个单词。
- 接口中实现类必须覆盖重写接口中所有的抽象方法。
- 接口中实现类如果没有覆盖重写接口中的所有抽象方法,这个实现类必须是抽象类。
- 如果一个类实现了多个接口,这多个接口当中,如果有相同的抽象方法,则只需覆盖重写一次即可;如果有相同的默认方法,则必须覆盖重写默认方法。
- 如果一个类的父类方法和接口的默认方法冲突了,则优先使用父类的方法。
- Java当中继承优先于接口。
- 接口中默认方法会被实现类继承,也可以被接口实现类覆盖重写。
- 接口中私有方法是为了减少代码量,并且对实现类不可见,所以不可以定义为public(业务思维,不是语法问题)。
- 接口中私有方法是用来抽取接口中默认方法或静态方法之间的代码重复问题,它是为了简化代码而设计。接口的私有方法分为 ①默认私有方法。②静态私有方法。定义格式分别如下:
①默认私有方法定义格式:
private 返回值类型 方法名(方法参数){
方法体;
}
②静态私有方法定义格式:
private static 返回值类型 方法名(方法参数){
方法体;
}
代码:
USB接口类:
public interface UsbInterface {
public static final String info = "Intel USB规范";
public abstract void inPut();
public abstract void outPut();
public static void birthYear(){
System.out.println("USB_4 规范提出于2019年");
}
public default void showInfo(){
System.out.println("正在检测系统是否升级");
System.out.println();
}
}
USB接口实现类:
public class InterfaceLearn implements UsbInterface{
@Override
public void inPut() {
System.out.println("正在拷贝信息到优盘");
}
@Override
public void outPut() {
System.out.println("正在从优盘拷贝信息");
}
}
运行类:
public class Demo {
public static void main(String[] args) {
InterfaceLearn usb = new InterfaceLearn();
usb.inPut();
usb.outPut();
usb.showInfo();
UsbInterface.birthYear();
}
}