Java 继承 - 使用相同方法的两个类

标签 java inheritance casting

我有两个类,ObjectAObjectB,它们都扩展同一个类 MasterObject。我还有一个接口(interface),其中包含我希望 ObjectAObjectB 都实现的方法。在 MasterObject 中找不到此方法。然后,我有一个具有 MasterObject 类型字段的类,并且想要访问 ObjectAObjectB 中的方法。不类型转换的话这可能吗?这是我的一些代码。

此外,我无法更改 MasterObject 类。

public interface MyInterface{
    void doSomething();
}

class ObjectA extends MasterObject implements MyInterface {

    @Override
    public void doSomething(){
        //...
    }
}

class ObjectB extends MasterObject implements MyInterface {
    @Override 
    public void doSomething(){
        //...
    }
}

class Main {
    MasterObject mObj;

    public void method1() {
        mObj = new ObjectA();
        mObj.doSomething();
    }

    public void method2() {
        mObj = new ObjectB();
        mObj.doSomething(); //runs code from ObjectB class
    }
}

现在这显然会引发一些编译器问题。 (无法解析方法 doSomething())。

像这样进行转换: ((ObjectA) mObj).doSomething(); 似乎可行,但是有另一种方法可以在不进行转换的情况下执行此操作吗?有更干净的吗?

最佳答案

最终的解决方案是创建一个实现 MyInterface 的代理抽象类 AbstractMasterObject,这将允许 ObjectAObjectB code> 拥有 MasterObjectMyInterface 的全部功能(如果它们扩展了 AbstractMasterObject

)

这可以像这样完成:

public abstract class AbstractMasterObject extends MasterObject implements MyInterface{

}

然后你可以像这样声明你的对象:

AbstractMasterObject a = new ObjectA();
AbstractMasterObject b = new ObjectB();

关于Java 继承 - 使用相同方法的两个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44976931/

相关文章:

java - 无法写入 ID 为 0 的 JSON : Unable to find com. demo.model.Control;

java - 在 Java 中转换内部条件运算符

javascript - 我可以用 es6 的 extend 关键字替换 util.inherits 吗?

grails - Grails/GORM 中的继承和约束问题

c# - 多种属性合二为一?

c - 任何人都可以向我解释以下内容

c++ - 堆栈对象的转换指针

java - 适用于 JOGL + 通用矩阵数学的快速 Java 矩阵库?

Java初学者在这里获得非零数字

java - 字符串中单词之间额外空格的正则表达式条件