强制我的类的子类只覆盖Java中的某些函数

Tri*_*wis 0 java generics methods overriding class

我有一节课,比方说

public class GeneralClass<T> {
    methodA() {...}
    methodB() {...}
    methodC() {...}
}
Run Code Online (Sandbox Code Playgroud)

而且我是从这个班级派生出来的

public class MoreSpecificClassString extends GeneralClass<String> {
    methodD() {...}
    methodE() {...}
    methodF() {...}
}

public class MoreSpecificClassInt extends GeneralClass<Integer> {
    methodX() {...}
    methodY() {...}
    methodZ() {...}
}
Run Code Online (Sandbox Code Playgroud)

现在,我想知道是否可以强制GeneralClass的子类只覆盖一个方法,例如methodA

谢谢

Mar*_*ers 5

是.制作methodA抽象并制作GeneralClass抽象类.如果你想禁止压倒一切methodBmethodC,它们标记为final.

编辑

另一方面,如果您希望能够提供默认实现methodA,并且要求子类覆盖它,则基本上违反了Liskov替换原则.你需要重新评估你需要这个设计的原因,因为它闻起来很糟糕.例如,绝对没有什么能阻止你的子类像这样覆盖你的方法:

@Override
public void methodA() {
    super.methodA();
}
Run Code Online (Sandbox Code Playgroud)

如果重新实现只能调用超类的默认实现,那么强制它首先被覆盖的重点是什么?

出于这个原因(其中包括),不可能提供默认实现要求子类覆盖它.重新思考你的设计.