我有一个类 A,它有一个抽象方法 doAction(BaseClass obj),需要一个 BaseClass 类型的参数
public class A {
//....
abstract void doAction(BaseClass obj);
//....
}
现在,我有另一个需要扩展 A 的类 B。但是,B 的 doAction 方法需要使用一个扩展了 BaseClass 的对象 DerivedClass。
public class B extends class A {
//..
void doAction(DerivedClass obj) {
obj.callMethodAvailableOnlyInDerivedClass();
}
}
我如何处理这种情况,我需要将类型为 DerivedClass 的参数传递给要重写的方法,同时它需要一个 BaseClass ?
谢谢!
最佳答案
你使基类泛化:
public class A<T extends BaseClass> {
//....
abstract void doAction(T obj);
//....
}
以及用派生类参数化的子类:
public class B extends A<DerivedClass> {
//..
void doAction(DerivedClass obj) {
obj.callMethodAvailableOnlyInDerivedClass();
}
}
如果没有泛型,这是不可能的,因为 B 会破坏 A 的契约:A 接受任何类型的 BaseClass,但您限制 B 只接受特定的子类。这不尊重 Liskov principle .
关于java - 将派生类传递给需要覆盖期望基类的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9421247/