让我们设置一个假设的方案。我父类如何正确使用继承并避免向下滚动
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.
很明显,我处理了一个更大的问题,但这是t他同样的原则,我自己的答案是将A的属性克隆到B中,然后使用B.但在此之前,我想听到更多的意见。
编辑:约束,我不能将B的实例传递给方法,也不使用instanceof方法。
编辑2:因为SomeClass的覆盖从接口这个方法必须始终使用A.
的实例编辑3我从来没有收到B的一个实例:这是由设计不当遗留代码,我跑生成的情况进入,我只是想找出更快,但干净的方式来解决作为excercise。
如果参数'A'是一个''instanceofB'','B'的'doSomething()'方法将被使用,因为它是'Overriding'''的'doSomething()'方法。没有必要将'A'转换为'B'来实现这个功能。 – CoderMusgrove
[调用Java中的子类的方法]可能的重复(http://stackoverflow.com/questions/2701182/call-a-method-of-subclass-in-java) –
“我永远不会收到B的实例,因为someClass从必须始终使用A的实例的接口覆盖此方法。“你怎么能确定你永远不会收到一个B的实例(因为B是-A)?我信任的唯一约束是'someInterface'中描述的约束。 – Spotted