Java9 接口细谈

时间:2023-03-10 02:47:41
Java9 接口细谈

java9对接口进行了改进,允许在接口中定义默认方法和类方法并且都支持方法的实现。同时添加了一种私有方法,私有方法也可提供方法实现。

注:下面语法只有在Java8以上的版本才允许在接口定义默认方法、类方法。

基本语法如下

[修饰符] interface 接口名 extends 父接口1,父接口2...
{
    零到多个常量定义...
    零到多个抽象方法定义...
    零到多个内部类、接口、枚举定义...
    零到多个私有方法、默认方法或类方法定义...
}

对上面语法的详细说明如下:

  • 修饰符可以使public或者省略,如果省略public访问控制符,则默认采用包权限访问控制符(default),即只有在相同包结构下才能访问该接口
  • 接口名应该与类名采用相同的命名规则,即如果仅从语法角度看,接口名只要是合法的标识符即可;如果要遵守Java的可读性规范,则接口名应由多个有意义的单词连缀而成[见名知意],每个单词首字母大写,单词和单词直接不需要任何的分隔符。接口名通常能够使用形容词。
  • 一个接口可以有多个父类,但是接口只能继承接口,不能继承类。

由于接口定义的是一种规范,因此接口里面不能包含构造器和初始化块的定义。

接口中可以包含成员变量(只能是静态常量)、方法(只能是抽象实例方法、类方法[静态方法]、默认方法[default修饰]、内部类[包括内部接口、枚举])定义。

接口的常量、方法、内部类和内部枚举都是public访问权限。定义接口成员可以省略!!!如果要手动指定也只能是public访问修饰符

JDK9中的 私有方法:其实私有方法的主要作用就是作为工具方法,为接口中的默认方法和静态方法[类方法]提供支持。私有方法可以拥有方法体,但私有方法不能使用default修饰。私有方法可以使用static修饰!!也就是说,私有方法可以是静态方法,可以是非静态的实例方法。

接口中的常量:系统会自动为这些成员变量增加static和final两个修饰符。也就是说,在接口中定义成员变量时,不管是否使用public static final修饰符,接口都是使用这三个修饰符来修饰。而且在接口里面没有构造器和初始块,所以接口定义的成员变量只能在定义时指定默认值(即初始化)。

  接口在定义成员变量采用如下两行代码的效果完全是一样的:

//若开发者不加 public static final 系统会自动加
int MAX_SIZE = 50;
public static final int MAX_SIZE = 50;

  上面说到接口里定义的方法只能是抽象方法、类方法、默认方法或私有方法,所以如果不是定义默认方法、类方法、私有方法,系统会自动为普通方法增加abstract修饰符;定义接口里面的普通方法时不管是否使用public abstract 修饰符,系统都会自动给加上。接口的普通方法不能有方法实现(方法体),因为是抽象的!!!;但是类方法、默认方法、私有方法又必须有方法实现(方法体)。

接口的继承:接口不同于类的继承,接口可以继承多个直接父接口。和类的继承相似的是,子接口扩展了某个父接口,将会获得父接口里定义的所有抽象方法、常量。继承多个直接父接口时,以逗号隔开 例如(interface 接口名 extends InterfaceA,InterfaceB)。

接口的主要用途:

  • 定义变量,也可以用于进行强制类型转换。
  • 调用接口中定义的常量
  • 被其他类实现

实现接口的类必须是public修饰,要符合重写的定义 “一大”

接口允许定义内部类,默认使用public static 修饰,也就是说接口内部类只是静态内部类

接口是位于继承树顶端的,多用于被其他类实现。由此引发面向接口编程。

该博文属于原创,若转发请配上原文地址https://www.cnblogs.com/shundong106/p/9905776.html