Java - 对特定的继承方案感到困惑

时间:2012-03-07 18:05:48

标签: java inheritance

假设我有一个名为A的类,而在A中有一个名为myMethod()的方法。现在说我创建一个A的子类,称为SubA,在SubA中,我重写myMethod()以使其按照我的意愿行事。现在说我在A中有一个名为myOtherMethod()的方法,它调用myMethod()(来自同一个类)。我没有覆盖SubA中的myOtherMethod()。如果我现在从SubA内部呼叫myOtherMethod(),它将清楚地运行A myOtherMethod()。但是现在这会调用A中定义的myMethod(),还是SubA中定义的(和覆盖的)?

为了进一步混淆事情,{A}是否是A类实现的某个接口的接口方法是否重要?

2 个答案:

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

}