2012-03-07 70 views
0

假設我有一個名爲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

回答

1

這是很容易去嘗試 - 即一個實現一個接口或者不是事實不有所作爲:

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

} 
1

如果創建SubA然後調用方法myOtherMethod()(這是A)的實例調用SubA定義的方法myMethod(),因爲它會覆蓋A定義的方法。