2012-01-31 96 views
13

我們能覆蓋的方法如下所述: -覆蓋主要方法

public static void main

+1

你能給的,當你想做到這一點的例子,爲什麼? – 2012-01-31 17:38:03

回答

15

main是一個靜態方法,因此是不是多態。您可以隱藏它是在子類中定義另一個靜態main方法,雖然。

1

不可以。您不能覆蓋靜態方法。

無論如何這不會有意義。由於您不需要該類的實例,因此不需要多態行爲。你只需要將全部從SomeParent.main()更改爲SomeChild.main()

0

MAIN是一種類方法(因爲它的定義爲static)。因此,「覆蓋」它(或者對於任何靜態方法而言)是沒有意義的。

「覆蓋」的概念僅用於實例方法。

This對於相同的閱讀是一個很好的閱讀。

0

不,不可能重寫靜態方法,因爲它們不是實例級方法,而是類級方法。

3

不,你在這裏失去了重點。主要方法有一個目的,併爲此唯一目的進行邏輯聲明:

Java中的主要方法屬於一個類,但不屬於對象。對象創建在Java中的main()是應用程序的起點,無法從特定於實例的方法啓動應用程序。這就是爲什麼靜態關鍵字與主要方法完美結合的原因。其實主要方法聲明的所有部分做出完美的感覺,當你覺得像「JVM」和畫面的主要方法做什麼(啓動應用程序):

  • public,因爲這種方法必須由可訪問jvm(不是由你寫的)。這意味着這個方法可以在沒有對象的情況下被訪問(因爲它的表示從不改變),但是如果你再次像jvm一樣思考,這裏的邏輯很容易被理解; 「我沒有任何對象來創建(實例化)對象,所以我需要一個靜態方法來啓動應用程序,因爲簡單沒有任何合理的方法來獲取特定於實例的方法,因爲我沒有任何東西尚未創造物體「。
  • void此方法無法在邏輯上返回任何內容,因爲沒有任何內容尚未返回任何內容。這是應用程序的起點。 主要我是主要的方法,因爲沒有我你不會有一個應用程序。
  • String[] args給我發送的數據你可能會覺得我有用的啓動。
3

我們不能重寫靜態方法,因爲靜態方法是一個類方法,並且這個方法的範圍在同一個類本身內。所以如果你想強行重寫,那麼你必須在該類範圍之外定義它,這是沒有意義的。

-1

這個我試過,不知道它的正確的方式來覆蓋的方法,但我能夠覆蓋這樣的主要方法,

class MainOverride { 

    public static void main(String[] args) { 

     MainOverridden mo = new MainOverridden(); 

     String [] s = {"a","b"}; 
     mo.main(s); 


    } 

} 

class MainOverridden extends MainOverride { 

    public static void main(String[] args) { 

     System.out.println("Main overridden"); 

    } 

} 
+2

您無法重寫靜態方法。你剛纔隱藏了主要方法MainOverride類。 – 2017-04-22 18:52:17

+0

他甚至沒有隱藏它。仍然可以像以前一樣運行'MainOverride'作爲應用程序。如果你沒有告訴它運行該子類,它有一個子類的事實是無關緊要的。 – 2017-04-22 19:31:49

+0

謝謝您的評論,我從中得到的結論是,我遵循重寫的方式並不實際有效,但請您可以慶祝更多 - 因爲我是新來的java :) – 2017-04-24 08:32:51