《四》接口

《四》接口

一、接口基础知识

接口是抽象类的延伸,可以将它看作是纯粹的抽象类,对外进行约束,接口中的大多方法都没有方法体,jdk1.8以后,default关键字修饰的方法可在接口中实现。

  • 属性全都是全局静态常量
  • 方法都是全局抽象方法
  • 无构造方法

接口使用interface关键字进行定义,其语法如下:

[访问修饰符] interface 接口名 [extends 父接口名列表]{

    [public] [static] [final] 常量 = 值;

    [public] 返回值类型 方法名(参数项);

    [default] 返回值类型 方法名(参数项){//方法体}
}
  • 访问修饰符一般为public,也可不写,为默认时,该接口的访问权限仅局限于所属的包
  • 接口名命名规范和类命名规范一样
  • extends 父接口名列表:可不写,用于指定要定义的接口继承于哪个父接口。

  • 在接口中定义的任何变量都自动是static和final的,因此,在接口中定义变量时,必须进行初始化,而且,实现接口的子类不能对接口中的变量重新赋值,但常量在接口中没有意义,很少使用
  • 一般方法在接口中没有方法体,而被default修饰的方法在jdk1.8后可在接口中实现。
  • 由于接口中的方法大都是抽象的,因此,当子类实现接口时,必须实现接口中的所有不被default的方法

 

二、多重继承

Java中类不允许多重继承,但使用接口就可以间接实现多重继承,一个类可以同时实现多个接口,这样就可以将所有需要实现的接口放置在implements关键字后并使用逗号“,”隔开,语法:

class 类名 implements 接口1, 接口2, …, 接口n{
  //类成员  
}

注意:每继承一个接口时都需要实现接口中所有的方法,这样一个类可能会有很多很多的代码,注释就很重要了,不然下次看就一脸懵逼 ?_?

使用多重继承时,可能出现变量或方法名冲突的情况,解决该问题时,如果变量冲突,则需要明确指定变量的接口,即通过“接口名.变量”实现;而如果出现方法冲突时,则只要实现一个方法即可。

 

接口也可以继承接口,和类继承类的使用方法一样,语法:

interface 子接口名 extends 父接口名{}

注意:接口继承接口,则子类在实现子接口时,需要同时实现父接口和子接口中定义的所有方法

 

三、区分抽象类和接口

虽然说java中的接口是抽象类型,抽象方法的集合,两者也有很多不同的地方。抽象类是对根源的抽象,而接口是对动作的抽象;抽象类的功能远超过接口,但一个类只能继承一个抽象类,而接口可多重继承,所以各有各的好处。

  • 接口不能被实例化,没有构造方法,但抽象类可以有构造方法。
  • 抽象类中可以有静态代码块等,接口中不可以。
  • 子类只能继承一个抽象类,但可以实现任意多个接口。
  • 一个类要实现一个接口必须实现接口中的所有方法,而抽象类不必。
  • 抽象类中的成员变量可以是各种类型,而接口中的成员变量只能是public static final的。

 

posted on 2020-06-04 14:04  北冥道人骑鲲打代码  阅读(163)  评论(0编辑  收藏  举报

导航