说,我有一个简单的类Fruit
定义如下:
public class Fruit {
int price;
public boolean isEqualPrice(Fruit object) {
return (object.price == price);
}
}
现在,有几个子类,Fruit
例如Apple
,Orange
等Mango
。我希望该方法isEqualPrice
仅在这些子类相同时才有效。例如,Apple.isEqualPrice(Apple)
将是有效的,但Apple.isEqualPrice(Orange)
不会是。我应该如何定义参数 isEqualPrice
来实现这一点?我不想isEqualPrice
在Fruit
.
一种可能的解决方案可能是:
public boolean isEqualPrice(Fruit object) {
if(this.getClass() != object.getClass())
throw new IllegalArgumentException();
return (object.price == price);
}
但是它只会在运行时报告类相同或不同,并且用户无法通过查看方法签名来实现正确的参数类型。有没有办法在编译时检测到这一点?
NOTE:
我认为compareTo
method ofenum
就是这样一种方法,因为每个enum
人都有这种方法,并且一种类型enum
不能与其他类型相比。但我无法理解它是如何实现的。