2017-02-27 41 views
-1

下面是我的一套代碼和文件名是State.java

class State 
{ 
    static String country; 
    static String capital; 


    State()  //Constructor 
    { 
     country = "America's"; 
     capital = "Washington D.C"; 

    } 

    static void display() 
    { 
     System.out.println(capital + " " + "is" + " " + country + " " +"capital."); 

     } 
    } 

    class Place extends State 
    { 
     static void display() 
    { 
      System.out.println("Capital is Washington D.C."); 
     } 


      public static void main(String[] args) 
      { 

       State st = new State();   
       Place pl = new Place(); 
       st.display(); 
       pl.display(); 
       st = pl; 

      } 

    } 

Error: Could not find or load main class State$Place,當我試圖運行它越來越顯示出來。

我的主要意圖是顯示Capital is Washington D.C.代替capital + " " + "is" + " " + country + " " +"capital."。我也使用了一個構造函數。

我正在使用eclipse IDE來執行我的程序。

+1

有沒有必要把主要方法放入內部類和AFAIK甚至不允許。 – Thomas

+0

將您的主要方法與模型分開放置在自己的類中。這給你更好的代碼組織 –

+0

另外,請了解更多關於'靜態'變量/方法,看看爲什麼你的狀態類不太正確 –

回答

0

剛做了一個快速測試,與我的評論相反,似乎靜態內部類允許包含主要方法。但是,代碼存在的問題是僅允許靜態內部類允許包含靜態方法(請參閱JLS)。由於Place不是靜態內部類,因此它不能具有靜態所需的主要方法。

除此之外,您應該將您的主要方法完全移到外部類或另一個類(請參閱板球評論以及)。

+0

@Thomas ...我跟你說的一樣。現在它工作。但是顯示這兩個消息。我只需要顯示一個,那就是Capital是Washington D.C. – Arvind

+0

@Arvind從main方法中刪除'st.display();'。 – Yousaf

+0

@Thomas ...但是,我想在課堂上做的方法重寫的方式延伸狀態。 – Arvind

0

the file name is State.java

當你的文件名是State.java,應該在State類,而不是在Place

正如你已經在你要撥打的display方法的評論指出,您的主要方法類Place,有2種方式來做到這一點。

主要方法

2-使用多態性作爲類Place刪除st.display();擴展類State

如果使用多態性,你main method應該像

public static void main(String[] args) 
{  
    State st = new Place(); 
    Place pl = new Place();   
    st.display();    //display method of class Place will be called  
    pl.display();    //display method of class Place will be called 
} 
+0

@Yousaf ...是的,我照你所說的做了。現在,這兩個消息都顯示出來了。但就像我說的。只想打印資本是華盛頓特區 – Arvind

+0

@Arvind然後不要調用'st.display();'。 – Thomas

+0

@Arvind這是因爲你正在使用它的對象'st'調用'State'類的'display'方法。從** main方法**中刪除'st.display();'。 – Yousaf

相關問題