[英]Turning a method implemented in superclass into abstract
我有一个带有以下类的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
?
谢谢
我能想到的唯一方法是在B
的equals
抛出一个异常:
public abstract class B extends A {
@Override
public boolean equals(Object obj) {
throw new UnsupportedOperationException();
}
}
这将确保未能覆盖equals
的B
子类不会回退到A
的equals
实现。
不幸的是,这将导致运行时异常,而不是编译时错误,后者是更可取的。
让我烦恼的是,您可以让抽象类B
在其equal()
方法中引发异常:
public abstract class B extends A{
@Override
public boolean equals(Object obj){
throw new UnsupportedOperationException("add your own implementation");
}
public abstract boolean equals2(Object obj);
}
这样, B
任何子类尝试默认使用继承的equals
方法都将无法工作,从而迫使他们实现自己的版本。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.