2013-04-30 26 views

回答

1

靜態方法在多態性的工作方式中沒有被覆蓋。但是,當您嘗試重寫靜態方法時,Java允許使用名稱隱藏的概念。

現在來你的問題。靜態方法可以通過Class Name和Object name來調用。如果用靜態方法重寫非靜態方法,編譯器將如何知道要調用哪個方法。

static void f(){} 

A obj = new A(); 

A.f()obj.f()都將調用靜態方法。如果你在這裏放置一個非靜態的f()混淆開始爲obj.f()

2

覆蓋意味着在子類中提供實例方法的新實現,實例方法可能會或可能不會與類實例成員一起使用。重寫它們並將其重新定義爲static是不合邏輯的。 static表示該方法與類相關,而不是與類的實例相關。

你不能在C#和Java中這樣做。

對於C#看看override - MSDN

不能使用新的,靜態的或虛擬的修飾符來修改 覆蓋方法。

相關問題