Sky*_*net 15 java polymorphism inheritance
我有一个类A,带有抽象方法doAction(BaseClass obj),期望一个类型为BaseClass的参数
public class A {
//....
abstract void doAction(BaseClass obj);
//....
}
Run Code Online (Sandbox Code Playgroud)
现在,我有另一个需要扩展A的B类.但是,B的doAction方法需要使用扩展BaseClass的对象DerivedClass.
public class B extends class A {
//..
void doAction(DerivedClass obj) {
obj.callMethodAvailableOnlyInDerivedClass();
}
}
Run Code Online (Sandbox Code Playgroud)
我如何处理这种情况,我需要将类型为DerivedClass的param传递给在期望BaseClass时被覆盖的方法?
谢谢!
JB *_*zet 21
您使基类通用:
public class A<T extends BaseClass> {
//....
abstract void doAction(T obj);
//....
}
Run Code Online (Sandbox Code Playgroud)
以及使用派生类参数化的子类:
public class B extends A<DerivedClass> {
//..
void doAction(DerivedClass obj) {
obj.callMethodAvailableOnlyInDerivedClass();
}
}
Run Code Online (Sandbox Code Playgroud)
没有泛型,这是不可能的,因为B会破坏A的契约:A接受任何类型的BaseClass,但是你将B限制为只接受一个特定的子类.这不尊重利斯科夫原则.
| 归档时间: |
|
| 查看次数: |
4596 次 |
| 最近记录: |