通过抽象 class 覆盖 equals 方法并将其设置为抽象,因此如果任何 class 扩展,它们必须实现

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

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

代码示例:

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

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

上面的class和接口的功能应该是一样的,但这是否意味着都重写了Object equals方法?即使我将其设置为抽象?

这项工作也是如此:

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

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

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

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