我有一个A类,我无法修改。 B扩展A,我可以修改B,它有方法getStuff()。 C1扩展A(我不能修改C1),C2扩展C1。我可以修改C2,它有方法getStuff()。 问题是A没有方法getStuff()所以我不能覆盖getStuff()并且我要放置强制转换和“if”。 (我只知道这个解决方案)。
Object类中是否存在返回INT的方法,我可以在B和C2中覆盖它? (我可以重命名getStuff())。 或者它是否存在一些编程技巧(或最佳实践)来做到这一点?
我用这种方式定义了这个类:
A myA;
if (...) myA = new B; else myA = new C2;
我想调用myA.getStuff()
答案 0 :(得分:2)
interface Stuff {
int getStuff();
}
class B extends A implements Stuff { ... }
class C2 extends C1 implements Stuff { ... }
这应该达到我想你想要的效果?!
您可以使用“普通类型”Stuff
的引用来容纳对B或C2的引用:
Stuff myA;
if (...) myA = new B(); else myA = new C2();
myA.getStuff();
或者您可以使用A,但是您必须进行强制转换才能调用getStuff:
A myA;
if (...) myA = new B(); else myA = new C2();
((Stuff)myA).getStuff();