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

问题描述:

假设我有一个名为A的类,并且在A中有一个名为myMethod()的方法。现在说我做了一个名为SubA的A的子类,并且在SubA中,我重写了myMethod()以使它做我想要的。现在说我在另一个叫做myOtherMethod()的方法中调用了myMethod()(来自同一个类)。我不会在SubA中覆盖myOtherMethod()。如果我现在从SubA内部拨打myOtherMethod(),它将明确运行A的myOtherMethod()。但是这现在叫做A中定义的myMethod()还是SubA中的定义(和重写)?Java - 对特定继承场景感到困惑

为了进一步混淆事物,究竟myMethod()是否是类A实现的某个接口的接口方法?

+0

这似乎很容易尝试,看看会发生什么... – yshavit 2012-03-07 18:07:42

+1

为什么不你自己尝试一下吗? – talnicolas 2012-03-07 18:07:49

这是很容易去尝试 - 即一个实现一个接口或者不是事实不有所作为:

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定义的方法。