JAVASE官方教程:接口之实现接口(3)
程序员文章站
2022-03-02 10:33:12
...
在你的类声名中包含一个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的实例.
上一篇: GDI+ 绘制直线、矩形、椭圆
下一篇: Java函数式编程(十)字符串及方法引用