java将超类中实现的方法转换为抽象
我有一个Java程序,其中包含以下类
public class A{
protected String name;
...
@Override
public boolean equals(Object obj){
if(!(obj instanceof A)){
return false;
}
A a = (A)(obj);
return a.name.equals(this.name);
}
}
public abstract class B extends A{
@Override
public boolean equals(Object obj){
return equals2(obj);
}
public abstract boolean equals2(Object obj);
}
public class C extends B{
private String data;
...
@Override
public boolean equals2(Object obj){
if(!(obj instanceof C)){
return false;
}
C c = (C)(obj);
if(c.data.equals(this.data)){
return c.name.equals(this.name);
}else{
return false;
}
}
}
有没有一种方法可以强制所有扩展class B
的类实现它们自己的equals
方法,而不必像示例中那样使用equals2
谢谢
# 1 楼答案
在我看来,你可以让抽象类
B
在其equal()
方法中抛出一个异常:然后,任何试图默认为继承的
B
方法的equals
子类都将无法工作,迫使它们实现自己的版本# 2 楼答案
我能想到的唯一方法是在
B
sequals
中抛出一个异常:这将确保未能覆盖
equals
的B
子类不会回退到A
的equals
实现不幸的是,这将导致运行时异常,而不是编译时错误,后者更可取