让 superclass 的方法由继承的 class 实现

Letting superclass's methods be implemented by an inherited class

假设我的代码有这样的结构:

public abstract class A{ 
    public abstract Foo methodX();
    public abstract Bar methodY();
}

public class B extends A {
    public Foo methodX(){
        // stuff
    }
    public Bar methodY(){
        // more stuff
    }
}

public class C extends A {
    public Foo methodX() {
        // stuff
    }
    public Bar methodY(){
        // What to do?
    }
}

public class D extends C {
    public Bar methodY() {
        // do stuff
    }
}

public class F extends C {
    public Bar methodY() {
        // do different stuff
    }
}

我这样做的原因是因为我有多个 classes 扩展 A,都有共同的方法 methodX()methodY() 而且我有多个 classes extending B 都有一些与 B 相同的属性,但需要有不同的方式 methodY() 并且有不同的 equals/hashcode.

那么,我如何才能让 B 实现唯一的 methodX() 而让 C 和 D 实现 methodY() 而无需返回 null 或在 methodY() 对于 B?

您需要将 class B 声明为抽象

public abstract class B extends A{
    public Foo medhodX(){
        // stuff
    }
}

通过声明class抽象你允许他不实现所有抽象方法(来自superclass或实现的接口)。所以你可以只实现一个抽象方法并强制child class实现所有剩余的抽象方法。