覆盖问题:在Object中是否存在要覆盖的方法?

时间:2014-07-22 10:21:09

标签: java override method-overriding

我有一个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()

1 个答案:

答案 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();