Passing Derived Class to a method which needs to override expecting a base class(将派生类传递给需要重写期望基类的方法)
问题描述
我有一个 A 类,有一个抽象方法 doAction(BaseClass obj) 需要一个 BaseClass 类型的参数
I have a class A, with an abstract method doAction(BaseClass obj) expecting a param of type BaseClass
public class A {
//....
abstract void doAction(BaseClass obj);
//....
}
现在,我有另一个类 B 需要扩展 A.但是,B 的 doAction 方法需要使用扩展 BaseClass 的对象 DerivedClass.
Now, I have another class B which needs to extend A. However, B's doAction method needs to use an object DerivedClass which extends BaseClass.
public class B extends class A {
//..
void doAction(DerivedClass obj) {
obj.callMethodAvailableOnlyInDerivedClass();
}
}
如果我需要将 DerivedClass 类型的参数传递给需要 BaseClass 的方法,我该如何处理?
How do I handle this situation where I need to pass param of type DerivedClass to the method to be overridden while it is expecting a BaseClass ?
谢谢!
推荐答案
你让基类泛型:
public class A<T extends BaseClass> {
//....
abstract void doAction(T obj);
//....
}
以及用派生类参数化的子类:
and the subclass parameterized with the derived class:
public class B extends A<DerivedClass> {
//..
void doAction(DerivedClass obj) {
obj.callMethodAvailableOnlyInDerivedClass();
}
}
没有泛型,这是不可能的,因为 B 会违反 A 的合同:A 接受任何类型的 BaseClass,但您限制 B 只接受特定的子类.这不尊重 Liskov 原则.
Without generics, it's not possible because B would break the contract of A: A accepts any kind of BaseClass, but you retrict B to only accept a specific subclass. This does not respect the Liskov principle.
这篇关于将派生类传递给需要重写期望基类的方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:将派生类传递给需要重写期望基类的方法
基础教程推荐
- Spring Boot Freemarker从2.2.0升级失败 2022-01-01
- 如何使用 Eclipse 检查调试符号状态? 2022-01-01
- 如何在不安装整个 WTP 包的情况下将 Tomcat 8 添加到 Eclipse Kepler 2022-01-01
- 由于对所需库 rt.jar 的限制,对类的访问限制? 2022-01-01
- 首次使用 Hadoop,MapReduce Job 不运行 Reduce Phase 2022-01-01
- 如何强制对超级方法进行多态调用? 2022-01-01
- 如何使用 Stream 在集合中拆分奇数和偶数以及两者的总和 2022-01-01
- Java 中保存最后 N 个元素的大小受限队列 2022-01-01
- 在螺旋中写一个字符串 2022-01-01
- 如何对 HashSet 进行排序? 2022-01-01