文档

Java™ 教程
隐藏目录
实现接口
路径:学习Java语言
课程:接口和继承
部分:接口

实现接口

要声明实现接口的类,需要在类声明中包含一个implements子句。您的类可以实现多个接口,因此implements关键字后面是由逗号分隔的接口列表。按照惯例,如果存在extends子句,则implements子句位于其后。

一个示例接口,Relatable

考虑一个定义如何比较对象大小的接口。

public interface Relatable {
        
    // this (调用isLargerThan的对象)
    // 和other必须是同一个类的实例,返回1,0,-1
    // 如果this大于,等于或小于other
    public int isLargerThan(Relatable other);
}

如果想要能够比较类似对象的大小,无论它们是什么,实例化它们的类应该实现Relatable

只要有一种方法可以比较从该类实例化的对象的相对"大小",任何类都可以实现Relatable。对于字符串,可以是字符数;对于书籍,可以是页数;对于学生,可以是体重等等。对于平面几何对象,面积是一个不错的选择(见下文的RectanglePlus类),而体积适用于三维几何对象。所有这些类都可以实现isLargerThan()方法。

如果知道一个类实现了Relatable,那么就知道可以比较从该类实例化的对象的大小。

实现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实例上调用getAreaother.getArea())将无法编译通过,因为编译器无法理解other实际上是一个RectanglePlus实例。

上一页: 定义接口
下一页: 使用接口作为类型