2014-12-08 75 views
1

封裝測試;呼叫繼承的類的功能,但仍父類的功能被執行

公共類TestMain {

public static void main(String[] args) { 
    Animal cat = new Cat(); 
    cat.xyz(); 
} 

}

class Animal{ 
    public static void xyz(){System.out.println("Inside animal");} 
} 

class Cat extends Animal{ 
    public static void xyz(){System.out.println("Inside cat");} 
} 

輸出:在內部貓類動物

[這裏最好的xyz()應該已經執行,但它沒有發生。相反,Animal類的xyz()正在執行。它只發生在我將這個xyz()函數設爲靜態時,否則就沒有問題。 ] 請說明理由。

+1

您的問題類似於[這個問題] [1 ]請檢查我的[answer there] [2] [1]:http://stackoverflow.com/questi ons/27345510/inheritance-in-java-subclass/27345630 [2]:http://stackoverflow.com/questions/27345510/inheritance-in-java-subclass/27345630#27345630 – Nazgul 2014-12-08 05:29:55

回答

0

的原因是因爲使用的是static方法和static方法被稱爲爲引用的類型。這不是重寫方法,因爲重寫適用於實例方法而不適用於靜態方法。

如果你讓你的方法非靜態然後xyz方法將取決於實例調用。

0

答案很簡單。實例僅在運行時創建,即在執行靜態方法之後創建。因此,當在呼叫XYZ的時間()變量貓仍然是一個動物不是貓。如果完全想要所需結果,請執行以下操作之一:

  1. 從方法簽名中除去static關鍵字。

  • 呼叫的方法的xyz()之類的以下
  • public static void main(String[] args) { 
    Animal cat = new Cat(); // remove this line 
    Cat.xyz(); // you can call static methods directly using the class name. 
    }