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?
谢谢
是.制作methodA抽象并制作GeneralClass抽象类.如果你想禁止压倒一切methodB和methodC,它们标记为final.
另一方面,如果您希望能够提供默认实现methodA,并且还要求子类覆盖它,则基本上违反了Liskov替换原则.你需要重新评估你需要这个设计的原因,因为它闻起来很糟糕.例如,绝对没有什么能阻止你的子类像这样覆盖你的方法:
@Override
public void methodA() {
super.methodA();
}
Run Code Online (Sandbox Code Playgroud)
如果重新实现只能调用超类的默认实现,那么强制它首先被覆盖的重点是什么?
出于这个原因(其中包括),不可能提供默认实现并要求子类覆盖它.重新思考你的设计.