说,我有一个简单的类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:我认为compareTomethod ofenum就是这样一种方法,因为每个enum人都有这种方法,并且一种类型enum不能与其他类型相比。但我无法理解它是如何实现的。