簡體   English   中英

通過抽象類覆蓋equals方法並將其設置為抽象,因此如果有任何類擴展,則必須實現

[英]Overriding equals method by a abstract class and set it as abstract so if any class extends, they must implement

我正在嘗試構建一個抽象類/接口來覆蓋已經存在的方法,並將它們設置為抽象方法。 這可能嗎?

代碼示例:

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

要么

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;
    }
}

首先,接口不會覆蓋方法。 因此,您不能通過向接口添加equals方法來從Object覆蓋equals 相反,可以將接口視為契約,它們保證實現它們的任何非抽象類都將具有所有接口方法(直接或通過繼承)。

關於通過繼承使方法抽象的方法,實際上可以做到這一點。 因此,您在抽象Box類中使用抽象定義覆蓋equals方法的示例將導致擴展Box任何類都必須實現equals方法。

就像@OskarEmilsson所評論的那樣,如果您這樣做,則還應該強制執行hashCode ,因為equals和hashCode應該彼此一致(相等的對象必須具有相等的hashCodes)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM