[英]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.