2014-03-30 99 views
0

第一個問題是在代碼裏面。第二個問題是爲什麼靜態方法不能被重寫爲非靜態方法?第三是爲什麼不能靜態和抽象一起?java繼承誤解

class A { 
    public void display() { 
     System.out.println("Display of Class A called"); 
    } 
} 

class B extends A { 
    public void display() { 
     System.out.println("Display of Class B called"); 
    } 
} 

class C extends B { 
    public void display() { 
     System.out.println("Display of Class C called"); 
     super.display(); // calls B's Display 
     // Is there a way to call A's display() from here? 
    } 
} 
+0

想想「靜態」是什麼意思 - 它不是特定於任何特定的實例。現在考慮多態是如何工作的:使用的實現取決於調用方法的* instance *。看看他們怎麼不一起工作?至於另一個問題,不,你不能。請參閱http://stackoverflow.com/questions/586363/。 –

+0

另外,請一次只問*一個問題*。 –

回答

3

[B] //有沒有一種方法調用的顯示從這裏??? [/ B]

不,你不能走兩步了在類層次結構。您可以實現並調用B中的方法,該方法將調用A實現。

爲什麼static方法不能被覆蓋成非static方法

static方法是與類關聯。多態性(並因此覆蓋)是一個適用於對象的概念,因此不適用於它們。

爲什麼不能staticabstract一起去

由於上述同樣的原因。方法abstract是應該在子類中實現的方法,因爲子類繼承了它。由於子類不會繼承static方法,因此static方法不能是abstract

0

第一個問題:不,你不能直接調用低音類的低音類,因爲在C類的視圖中,它不知道B類有低音類,它是A類。C所知道的就是它有一個基類,它是B.

第二個問題:靜態方法只是組織全局方法的簡單方法。沒有繼承。您只需將該方法放到一個類中,這樣當您編寫代碼來調用它時,就知道在哪裏找到它。

第三個問題:abstract意味着「這是什麼類的事情,這裏有一些基本的功能,但我不能完成這個,我繼承並完成一切留給搞不定」。正如前面所提到的,靜態方法只是一種將「獨立」的方法,不需要初始化,也不需要上下文。這兩者不會在一起。