接口
一、接口
接口是引用类型的一种,与类相似但也存在诸多不同;如果将类比作“电路的设计图”,那么接口就是“遥控器的设计图”
接口声明
这里以视频播放器、CD播放器、DVD播放器等播放器(播放设备)为例进行讲解,所有的播放器都可以执行“播放” 和“停止” 等操作;虽然播放器的实际运行各不相同, 但遥控器有"播放按钮” 和“停止按钮” 这一点是共通的。
共通部分的遥控器如图a,将"Player遥控器由play和stop两个按钮组成“ 这一遥控器的设计图表示为程序, 就是图b所示的接口声明,与类声明相似但开头的关键字并不是class,而是interface, 这一点与类有所不同
接口中的所有方法都为public且abstract,必须用 ';'来替换方法体{}进行声明, 这一点与类中的抽象方法相同
接口的实现
接口中声明的抽象方法的主体要在在实现该接口的类中定义
实现接口Player的类VideoPlayer的声明如图a所示,implements Player部分表示接口Player的实现。这个声明和派生类的声明相似,不过使用的关键字并不是extends, 而是implements
来理解类VideoPlayer的声明:该类会实现Player遥控器,为此需要实现各个按钮所调用的方法主体,它们之间的关系如图b所示
类VideoPlayer在实现接口Player的同时也会实现play和stop这两个方法(重写方法并定义主体);
重写的方法必须声明为public, 这是因为接口的方法为public, 已无法再强化其访问控制,这与类的派生中的重写是一样
【接口中的方法为public且abstract。在实现该接口的类中, 各方法在实现时需要加上public修饰符】
创建视频播放器VideoPlayer和CD播放器CDPlayer,以实现接口Player,程序如下:
// 播放器 接口
public interface Player {
void play(); // ○播放
void stop(); // ○停止
}
//===== 视频播放器 =====//
public class VideoPlayer implements Player {
private int id; // 制造编号
private static int count = 0; // 到目前为止已经赋的制造编号
public VideoPlayer() { // 构造函数
id = ++count;
}
public void play() { // ○播放
System.out.println("■视频播放开始!");
}
public void stop() { // ○停止
System.out.println("■视频播放结束!");
}
public void printInfo() { // 显示制造编号
System.out.println("该机器的制造编号为[" + id + "]。");
}
}
//===== CD播放器 =====//
public class CDPlayer implements Player {
publi