让我们假设一个场景。我有父类
public class A {
protected void doSomething(){
//do something the A way
}
}
和子类
public class B extends A{
@Override
protected void doSomething(){
// do something the B way
}
}
我有一些假设类:
public class SomeClass implements someInterface{
@Override
public void someMethod(A aObject){
aObject.doSomething();
}
}
但我想使用 B 的行为,我不能更改方法参数,也不能将其向下转换为 B。
显然我正在处理一个更大的问题,但这是相同的原则,我自己的答案是将 A 的属性克隆到 B,然后使用 B。但在此之前,我想听听更多的意见。
编辑:约束,我不能将 B 的实例传递给该方法,也不能使用 instanceof 方法。
编辑 2:我从未收到 B 的实例,因为 someClass 从必须始终使用 A 的实例的接口(interface)覆盖此方法。
编辑 3:这种情况是由我遇到的设计不当的遗留代码引起的,我只是想找出一种更快但更干净的方法来作为练习进行修复。
最佳答案
只需将 B
的实例传递给 someMethod()
因为 B
"ISA"A
, 它会工作并将调用 B
的 doSomething()
。
关于java - 如何正确使用继承,避免向下转型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31528984/