Java教程是为JDK 8编写的。本页中描述的示例和实践不利用后续版本中引入的改进,并可能使用不再可用的技术。
请参阅Java语言更改,了解Java SE 9及其后续版本中更新的语言特性的摘要。
请参阅JDK发行说明,了解所有JDK版本的新功能、增强功能以及已删除或已弃用选项的信息。
要声明实现接口的类,需要在类声明中包含一个implements子句。您的类可以实现多个接口,因此implements关键字后面是由逗号分隔的接口列表。按照惯例,如果存在extends子句,则implements子句位于其后。
考虑一个定义如何比较对象大小的接口。
public interface Relatable {
// this (调用isLargerThan的对象)
// 和other必须是同一个类的实例,返回1,0,-1
// 如果this大于,等于或小于other
public int isLargerThan(Relatable other);
}
如果想要能够比较类似对象的大小,无论它们是什么,实例化它们的类应该实现Relatable。
只要有一种方法可以比较从该类实例化的对象的相对"大小",任何类都可以实现Relatable。对于字符串,可以是字符数;对于书籍,可以是页数;对于学生,可以是体重等等。对于平面几何对象,面积是一个不错的选择(见下文的RectanglePlus类),而体积适用于三维几何对象。所有这些类都可以实现isLargerThan()方法。
如果知道一个类实现了Relatable,那么就知道可以比较从该类实例化的对象的大小。
这里是在创建对象部分中介绍的Rectangle类的重新实现,以实现Relatable。
public class RectanglePlus
implements Relatable {
public int width = 0;
public int height = 0;
public Point origin;
// 四个构造函数
public RectanglePlus() {
origin = new Point(0, 0);
}
public RectanglePlus(Point p) {
origin = p;
}
public RectanglePlus(int w, int h) {
origin = new Point(0, 0);
width = w;
height = h;
}
public RectanglePlus(Point p, int w, int h) {
origin = p;
width = w;
height = h;
}
// 移动矩形的方法
public void move(int x, int y) {
origin.x = x;
origin.y = y;
}
// 计算矩形的面积的方法
public int getArea() {
return width * height;
}
// 实现Relatable接口所需的方法
public int isLargerThan(Relatable other) {
RectanglePlus otherRect
= (RectanglePlus)other;
if (this.getArea() < otherRect.getArea())
return -1;
else if (this.getArea() > otherRect.getArea())
return 1;
else
return 0;
}
}
因为RectanglePlus实现了Relatable接口,所以可以比较任意两个RectanglePlus对象的大小。
Relatable接口中定义的isLargerThan方法接受一个Relatable类型的对象。在前面的示例中,粗体显示的代码将other强制转换为RectanglePlus实例。类型转换告诉编译器对象的真实类型。直接在other实例上调用getArea(other.getArea())将无法编译通过,因为编译器无法理解other实际上是一个RectanglePlus实例。