/ / equalsメソッドを抽象クラスでオーバーライドし、抽象クラスとして設定します。クラスが拡張されている場合は、それらを実装する必要があります - java、interface、abstract-class、override、abstract-methods

equalsメソッドを抽象クラスでオーバーライドし、抽象クラスとして設定すると、クラスが拡張されている場合、それらは - java、interface、abstract-class、override、abstract-methodsを実装する必要があります。

私はすでに存在するメソッドをオーバーライドして抽象クラスとして設定する抽象クラス/インタフェースを構築しようとしています。これは可能ですか?

コード例:

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

または

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

上記のクラスとインタフェースの両方が同じ関数を持つ必要がありますが、これはObject equalsメソッドをオーバーライドすることを意味しますか?私が抽象として設定したとしても?

それで、これはうまくいくでしょう:

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

回答:

回答№1は0

まず、インタフェースはメソッドをオーバーライドしません。だから上書きすることはできません equals から Objectequals メソッドをインターフェイスに追加します。 インタフェースは、契約として考えることができ、それらを実装する非抽象クラスがすべてのインタフェースメソッドを(直接または継承を介して)持つことを保証します。

継承を介して抽象メソッドを作成することに関しては、実際にこれを行うことができます。したがって、あなたの equals あなたの抽象Boxクラスの抽象定義を持つメソッドは、 Box を実装する必要があります equals 方法。

@OskarEmilssonがコメントしたように、あなたがこれをしたら、 hashCode equalsとhashCodeが互いに一致する必要があるため(equalsオブジェクトは等しいhashCodeを持つ必要があるため)、実装されます。