私はすでに存在するメソッドをオーバーライドして抽象クラスとして設定する抽象クラス/インタフェースを構築しようとしています。これは可能ですか?
コード例:
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
から Object
に equals
メソッドをインターフェイスに追加します。 インタフェースは、契約として考えることができ、それらを実装する非抽象クラスがすべてのインタフェースメソッドを(直接または継承を介して)持つことを保証します。
継承を介して抽象メソッドを作成することに関しては、実際にこれを行うことができます。したがって、あなたの equals
あなたの抽象Boxクラスの抽象定義を持つメソッドは、 Box
を実装する必要があります equals
方法。
@OskarEmilssonがコメントしたように、あなたがこれをしたら、 hashCode
equalsとhashCodeが互いに一致する必要があるため(equalsオブジェクトは等しいhashCodeを持つ必要があるため)、実装されます。