Java—对特定继承场景感到困惑

Java—对特定继承场景感到困惑,java,inheritance,Java,Inheritance,假设我有一个名为a的类,在a中有一个名为myMethod()的方法。现在假设我创建了一个名为SubA的a的子类,在SubA中我重写了myMethod(),让它做我想做的事情。现在假设我在一个名为myOtherMethod()的函数中有另一个方法,它调用myMethod()(来自同一个类)。我不重写SubA中的myOtherMethod()。如果我现在从SubA内部调用myOtherMethod(),它显然会运行A的myOtherMethod()。但是,这现在是调用A中定义的myMethod(),

假设我有一个名为a的类,在a中有一个名为
myMethod()
的方法。现在假设我创建了一个名为SubA的a的子类,在SubA中我重写了
myMethod()
,让它做我想做的事情。现在假设我在一个名为
myOtherMethod()
的函数中有另一个方法,它调用
myMethod()
(来自同一个类)。我不重写SubA中的
myOtherMethod()
。如果我现在从SubA内部调用
myOtherMethod()
,它显然会运行A的
myOtherMethod()
。但是,这现在是调用A中定义的
myMethod()
,还是调用SubA中定义的(和重写的)方法


为了进一步混淆问题,是否
myMethod()
是类A实现的某个接口的接口方法有关系吗?

如果您创建
SubA
的实例,那么调用method
myOtherMethod()
(在
A
中)调用method
myMethod()
SubA
中定义的
,因为它覆盖了
A

中定义的方法,所以很容易尝试-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()
    }

}

这似乎很容易尝试,看看会发生什么…你为什么不自己试试呢?