java - 如何正确使用继承,避免向下转型

标签 java oop

让我们假设一个场景。我有父类

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, 它会工作并将调用 BdoSomething()

关于java - 如何正确使用继承,避免向下转型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31528984/

相关文章:

java - 当接近内存容量时调整数组大小

java - 使用 JAVA 在 JMS 队列中发布消息

java - 尝试将菜单添加到 TableViewer 的标题行(标题行)

Python:如何 "kill"类实例/对象?

java - 读取具有多个不同类的 JSON 作为响应

java - 将 ant build.xml 导入 Eclipse 时显示 "javac"任务在目标 "compile"中未找到

java - 如何在eclipse IDE中显示巨大的变量

java - 从现有子集创建子集的有效方法?

python - 在 Python 中,什么时候应该使用元类?

javascript - 当方法被传递给另一个函数时如何访问实例方法中的实例属性?