【问题标题】:Overriding equals method by a abstract class and set it as abstract so if any class extends, they must implement通过抽象类覆盖equals方法并将其设置为抽象,因此如果任何类扩展,它们必须实现
【发布时间】:2017-05-05 21:17:35
【问题描述】:

我正在尝试构建一个抽象类/接口来覆盖已经存在的方法并将它们设置为抽象。这可能吗?

代码示例:

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

【问题讨论】:

  • 你试过了吗?
  • 哥们你的概念真的动摇了,我建议你先从docs.oracle.com/javase/tutorial/java/index.html教程开始。
  • @JornVernee 你确定吗?
  • @chrylis 嗯,不,这似乎只适用于接口。
  • 注意:请记住,如果您要覆盖 equals() 方法,请不要忘记也覆盖 hashCode() 方法。提醒一下

标签: java interface abstract-class overriding abstract-methods


【解决方案1】:

首先,接口不会覆盖方法。因此,您不能通过将equals 方法添加到接口来​​从Object 覆盖equals。相反,接口可以被认为是契约,它们保证实现它们的任何非抽象类都将具有所有接口方法(直接或通过继承)。

关于通过继承使方法抽象,实际上您可以这样做。因此,您在抽象 Box 类中使用抽象定义覆盖 equals 方法的示例将导致任何扩展 Box 的类必须实现 equals 方法。

正如@OskarEmilsson 评论的那样,如果您这样做,那么您还应该强制实现hashCode,因为equals 和hashCode 应该彼此一致(equals 对象必须具有相等的hashCodes)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-09
    • 2015-06-29
    相关资源
    最近更新 更多