假设我有一个名为A的类,而在A中有一个名为myMethod()
的方法。现在说我创建一个A的子类,称为SubA,在SubA中,我重写myMethod()
以使其按照我的意愿行事。现在说我在A中有一个名为myOtherMethod()
的方法,它调用myMethod()
(来自同一个类)。我没有覆盖SubA中的myOtherMethod()
。如果我现在从SubA内部呼叫myOtherMethod()
,它将清楚地运行A myOtherMethod()
。但是现在这会调用A中定义的myMethod()
,还是SubA中定义的(和覆盖的)?
为了进一步混淆事情,{A}是否是A类实现的某个接口的接口方法是否重要?
答案 0 :(得分:1)
如果您创建SubA
的实例,则调用方法myOtherMethod()
(位于A
中)会调用myMethod()
中定义的方法SubA
,因为它会覆盖定义的方法在A
。
答案 1 :(得分:1)
很容易尝试 - 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()
}
}