我有两个类,ObjectA
和 ObjectB
,它们都扩展同一个类 MasterObject
。我还有一个接口(interface),其中包含我希望 ObjectA
和 ObjectB
都实现的方法。在 MasterObject
中找不到此方法。然后,我有一个具有 MasterObject
类型字段的类,并且想要访问 ObjectA
和 ObjectB
中的方法。不类型转换的话这可能吗?这是我的一些代码。
此外,我无法更改 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
,这将允许 ObjectA
和 ObjectB
code> 拥有 MasterObject
和 MyInterface
的全部功能(如果它们扩展了 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/