114. Java 接口 - 定义接口及其实现
接口声明:Relatable
在 Java 中,接口用来定义类之间的一种通用“契约”,即规定类必须提供特定的方法。接口并不提供方法实现,而是声明方法的签名,并且规定哪些方法必须由实现该接口的类来实现。
我们可以定义一个接口 Relatable,它允许我们比较两个对象的大小。在这种情况下,接口会提供一个方法 isLargerThan(),该方法用于比较两个对象的相对大小。
public interface Relatable {
// 用于比较两个对象的大小
// 如果当前对象大于其他对象,则返回 1
// 如果当前对象等于其他对象,则返回 0
// 如果当前对象小于其他对象,则返回 -1
public int isLargerThan(Relatable other);
}
在这个接口中,isLargerThan() 方法的参数是另一个实现了 Relatable 接口的对象。返回值的规则如下:
- 返回
1表示当前对象比参数对象大。 - 返回
0表示当前对象和参数对象相等。 - 返回
-1表示当前对象比参数对象小。
接口应用
如果我们希望能够比较不同类实例的“相对大小”,任何实现了 Relatable 接口的类都可以使用 isLargerThan() 方法。例如,比较两个矩形的面积,比较两个学生的体重,或者比较两个书本的页数等。只要这些类实现了 Relatable 接口,我们就能够比较它们的大小。
Relatable 接口的实现:RectanglePlus 类
以下是实现了 Relatable 接口的 RectanglePlus 类,它表示一个矩形,并可以与其他矩形进行比较大小。矩形的“大小”由它的面积决定。
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 接口的 isLargerThan() 方法
@Override
public int isLargerThan(Relatable other) {
// 强制类型转换,将 other 转换为 RectanglePlus 类型
RectanglePlus otherRect = (RectanglePlus) other;
// 比较当前矩形与其他矩形的面积
if (this.getArea() < otherRect.getArea()) {
return -1; // 当前矩形小
} else if (this.getArea() > otherRect.getArea()) {
return 1; // 当前矩形大
} else {
return 0; // 两个矩形的面积相等
}
}
}
解释
-
构造方法:
RectanglePlus类有多个构造方法,用于创建不同的矩形实例。我们可以根据需要设置矩形的宽度、高度或原点位置。 -
move()方法:move()方法可以移动矩形的位置,改变原点坐标。 -
getArea()方法:getArea()方法返回矩形的面积,计算公式为:宽度 * 高度。 -
isLargerThan()方法: 该方法是Relatable接口要求实现的方法。它用于比较当前矩形与另一个矩形的面积,返回值根据面积大小来决定:- 返回
-1表示当前矩形的面积小于另一个矩形。 - 返回
1表示当前矩形的面积大于另一个矩形。 - 返回
0表示两个矩形的面积相等。
注意:
isLargerThan()方法接收的参数是Relatable类型的对象,但我们必须将该对象强制转换为RectanglePlus类型,因为我们知道传入的对象实际上是一个RectanglePlus实例。这是 Java 中常见的类型转换方式,允许我们使用RectanglePlus特有的getArea()方法。 - 返回
使用 RectanglePlus 类
由于 RectanglePlus 实现了 Relatable 接口,因此我们可以通过 isLargerThan() 方法来比较任意两个 RectanglePlus 对象的大小。
public class TestRectangle {
public static void main(String[] args) {
// 创建两个矩形
RectanglePlus rect1 = new RectanglePlus(5, 10); // 5x10 的矩形
RectanglePlus rect2 = new RectanglePlus(6, 8); // 6x8 的矩形
// 比较两个矩形的大小
int result = rect1.isLargerThan(rect2);
if (result == 1) {
System.out.println("rect1 大于 rect2");
} else if (result == 0) {
System.out.println("rect1 等于 rect2");
} else {
System.out.println("rect1 小于 rect2");
}
}
}
输出:
rect1 小于 rect2
在这个例子中,我们创建了两个 RectanglePlus 对象 rect1 和 rect2,分别表示 5x10 和 6x8 的矩形。通过 isLargerThan() 方法比较两个矩形的面积,输出结果为“rect1 小于 rect2”。
总结
- 接口
Relatable允许我们定义一种标准,用于比较不同类对象的“相对大小”。 - 任何类只要实现了
Relatable接口,就能够比较该类的对象与其他同类型对象的大小。 - 在实现
Relatable接口时,我们需要提供isLargerThan()方法的具体实现,这个方法接收一个Relatable类型的对象并返回比较结果。 - 通过这种方式,我们能够实现灵活的对象比较,增强代码的可扩展性和重用性。