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
实例。