2017-05-05 21 views
0

我試圖構建一個抽象類/接口,覆蓋已存在的方法並將它們設置爲抽象。這可能嗎?通過抽象類重寫equals方法並將其設置爲抽象,所以如果任何類擴展,它們必須實現

代碼示例:

public abstract class Box { 
    @Override 
    public abstract boolean equals(Object o); 
} 

OR

public interface Box { 
    @Override 
    boolean equals(Object o); 
} 

兩個類及以上的接口應該具有相同的功能,但是這並不意味着這兩個覆蓋對象的equals方法?即使我把它設置爲抽象的?

所以將這項工作:

public class Tea extends Box { 
    @Override 
    public boolean equals(Object o) { 
     // TODO Auto-generated method stub 
     return false; 
    } 
} 
+7

你試過了嗎? – chrylis

+0

Buddy你的概念真的動搖了,我建議你從http://docs.oracle.com/javase/tutorial/java/index.html教程開始,立即生效。 – hagrawal

+0

@JornVernee你確定嗎? – chrylis

回答

0

首先,接口不重寫方法。因此,您無法通過將equals方法添加到接口來​​從Object覆蓋equals。接口可以被認爲是契約,他們保證任何實現它們的非抽象類將擁有所有的接口方法(直接或通過繼承)。

關於通過繼承製作抽象方法,實際上可以這樣做。因此,在抽象Box類中使用抽象定義覆蓋equals方法的示例將導致延伸Box的任何類必須實現equals方法。

而@OskarEmilsson評論說,如果你這樣做,那麼你應該強制執行hashCode,因爲equals和hashCode應該相互一致(equals對象必須具有相同的hashCode)。

相關問題