在你的类声名中包含一个implements子句用来实现一个接口.一个类可以在implements关键字后跟一个以逗号分隔的接口列表来实现多个接口
.按照惯例,implements子句跟在extends子句后(如果有).
一个例子,Relatable:
public interface Relatable {
// this (调用isLargerThan的对象)和
// other 必须是相同类的实例
// 返回 1, 0, -1 如果this大于,
// 等于,小于other
public int isLargerThan(Relatable other);
}
如果你想比较两个相似对象的大小二不管他们真正是什么,那么这个类必须实现了Relatable然后实例化他们.
如果你想要一种比较对象之间的"大小",那么任意类都可以实现它.对于字符串,"大小"可能指的是字符数;对于书来说,它可能指书的页数等等.所有这样的类都可以实现isLargerThan()方法.
如果你知道了某个类实现了Relatable,那么你就知道你可以比较这个类的两个实例的大小.
实现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对象是可以比较大小的.
注意:isLargerThan方法接受一个Relatable类型.
RectanglePlus otherRect = (RectanglePlus)other;
这行代码将other转换成RectanglePlus实例.类型转换告诉编译器这个对象真正是什么.直接调用other.getArea()会失败,因为编译器不知道other是RectanglePlus的实例.