(学习参考书:Java2实用教程第5版)
一、接口
使用关键字interface来定义一个接口,与类相像,一个接口包含接口声明和接口体:
interface 接口名{
接口体内容;
}
接口体:包含常量的声明(没有变量)和抽象方法两部分;接口体中的方法只有抽象方法。而且接口体中:所有的常量的访问权限一定都是public,而且是static常量(允许省略public final static修饰符),所有的抽象方法的访问权限一定都是public(允许省略public abstract修饰符)
二、实现接口
(1)类实现接口
一个类中需要使用关键字implements声明该类实现一个或多个接口;格式如下:
class A (extends B) implements 接口1,接口2{
...;
}
(2)重写接口中的方法
如果一个非抽象类是实现了某个接口,那么这个类必须重写这个接口中的所有方法。由于接口中的方法一定是共有的抽象方法(public abstract),所以重写的方法除了要去掉abstract写出方法体外,必须添加public,否则将降低方法的访问权限。
如果一个类的声明是实现一个接口,但没有重写接口中的所有方法,那么这个类必须是抽象类,抽象类既可以重写接口中的方法,也可以直接拥有接口中的方法。
(3)接口的细节说明
- 程序可以用接口名访问接口中的常量,但是如果一个类实现了接口,那么该类直接可以在类体中使用该接口的常量。
- 定义接口时,如果关键字interface前加public,则该接口可以被任何一个类实现;如果不加public,则友好接口只能被在同一个包内的类实现。
- 如果父类实现了某个接口,它的子类就自然实现了该接口,不必再次使用implements声明这个接口的实现。
- 接口也可以被继承,通过extends声明子接口继承父接口。因为接口中的常量和方法都是public类型的,所以子接口将完整的继承父接口中的所有常量和方法
三、接口回调
接口也可以声明变量称为接口变量,接口回调是指:可以把实现某一接口的类创建的对象的引用赋给该接口声明的接口变量,那么该接口变量就可以调用被类实现的接口方法。实际上,当接口变量调用被类实现的接口方法时,就是通知相应的对象调用这个方法。
对象可以调用类原本的方法和类实现的接口方法,但是接口变量只能通过对象的引用传递调用这个类实现的接口方法。
四、接口的作用
(1)接口可以抽象出重要的行为标准,该行为标准用抽象方法来表示。
(2)可以把实现接口的类的对象的引用赋值给接口变量,该接口变量可以调用被该类实现的接口方法,即体现该类根据接口里的行为标准给出具体行为。
(3)接口的思想在于它可以要求某些类有名称相同的方法,但方法的具体内容可以不同,即要求实现接口。
五、抽象类与接口的区别
(1)抽象类的子类必须重写抽象类中所有的抽象方法,接口变量通过对象调用这个类实现的接口方法。
(2)接口在要求一些类有相同名称的方法的同时,并不强迫这些类具有相同的父类。
(3)抽象类要求所有子类都有这个功能,接口根据情况要求一部分类实现某个功能
(4)抽象类是对一类事物的抽象,接口是对某种行为的抽象。
大体功能:
class abstract 一个具有共性方法的抽象类
interface 数个具有独有方法的接口
具体的功能子类1 extends 抽象类 implements 接口1,接口2
具体的功能子类1 extends 抽象类 implements 接口1,接口3
具体的功能子类1 extends 抽象类 implements 接口2,接口3