Java - 对特定继承场景感到困惑
问题描述:
假设我有一个名为A的类,并且在A中有一个名为myMethod()
的方法。现在说我做了一个名为SubA的A的子类,并且在SubA中,我重写了myMethod()
以使它做我想要的。现在说我在另一个叫做myOtherMethod()
的方法中调用了myMethod()
(来自同一个类)。我不会在SubA中覆盖myOtherMethod()
。如果我现在从SubA内部拨打myOtherMethod()
,它将明确运行A的myOtherMethod()
。但是这现在叫做A中定义的myMethod()
还是SubA中的定义(和重写)?Java - 对特定继承场景感到困惑
为了进一步混淆事物,究竟myMethod()
是否是类A实现的某个接口的接口方法?
答
这是很容易去尝试 - 即一个实现一个接口或者不是事实不有所作为:
public class A {
public void myMethod() {
System.out.println("A.myMethod()");
}
public void myOtherMethod() {
System.out.println("A.myOtherMethod()");
myMethod();
}
public static class SubA extends A {
@Override
public void myMethod() {
System.out.println("SubA.myMethod()");
}
}
public static void main(String[] args) {
A a = new A();
SubA subA = new SubA();
a.myMethod(); //A.myMethod()
subA.myMethod(); //SubA.myMethod()
a.myOtherMethod(); //A.myOtherMethod() + A.myMethod()
subA.myOtherMethod(); //A.myOtherMethod() + SubA.myMethod()
}
}
答
如果创建SubA
然后调用方法myOtherMethod()
(这是A
)的实例调用SubA
定义的方法myMethod()
,因为它会覆盖A
定义的方法。
这似乎很容易尝试,看看会发生什么... – yshavit 2012-03-07 18:07:42
为什么不你自己尝试一下吗? – talnicolas 2012-03-07 18:07:49