2017-02-27 2 views
-1

Unten finden oder laden ist mein Satz von Code und der Dateinamen 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 angezeigt wird, wenn ich es zu laufen versuchen.

Meine Hauptabsicht ist Capital is Washington D.C. statt capital + " " + "is" + " " + country + " " +"capital." anzuzeigen. Ich habe auch einen Konstruktor benutzt.

Ich verwende Eclipse-IDE, um mein Programm auszuführen.

+1

Es gibt keine Notwendigkeit, die Hauptmethode in eine innere Klasse und AFAIK, die nicht einmal erlaubt ist, zu setzen. – Thomas

+0

Stellen Sie Ihre Hauptmethode getrennt von den Modellen in eine eigene Klasse ein. Das gibt Ihnen bessere Code-Organisation –

+0

Erfahren Sie auch mehr über 'statische' Variablen/Methoden und sehen Sie, warum Ihre State-Klasse nicht ganz korrekt –

Antwort

0

Ich habe gerade einen schnellen Test gemacht und entgegen meinem Kommentar scheint es, dass statische innere Klassen eine Hauptmethode enthalten dürfen. Das Problem mit Ihrem Code ist jedoch, dass nur statische innere Klassen statische Methoden enthalten dürfen (siehe JLS). Da Place keine statische innere Klasse ist, kann sie keine Hauptmethode haben, die statisch sein muss.

Außerdem sollten Sie wahrscheinlich Ihre Hauptmethode auf die äußere Klasse oder eine andere Klasse insgesamt verschieben (siehe auch den Kommentar von Cricket).

+0

@Thomas ... ich tat das selbe wie du gesagt hast. Jetzt funktioniert es. Aber beide Nachrichten anzeigen. Ich muss nur einen anzeigen und das ist Capital ist Washington D.C. – Arvind

+0

@Arvind Entfernen Sie einfach 'st.display();' von der Hauptmethode. – Yousaf

+0

@Thomas ... Aber was ist mit Methoden überschreiben, die ich versuche in der Klasse Place extends State. – Arvind

0

the file name is State.java

Als Ihr Dateiname ist State.java, Ihre HauptmethodeState in der Klasse sein sollte, nicht in Place Klasse

Wie Sie in einem Kommentar darauf hingewiesen haben, dass Sie die display Methode aufrufen wollen von Klasse Place, gibt es 2 Möglichkeiten, es zu tun.

1- entfernen st.display(); von Hauptmethode

2- Mit Polymorphismus als Klasse Place erstreckt Klasse State

Wenn die Verwendung Polymorphismus, sollte Ihr main method wie

aussehen
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 ... Ja, ich habe getan, wie Sie erwähnt. Jetzt werden beide Nachrichten angezeigt. Aber wie ich schon sagte. Willst du nur drucken Capital ist Washington D.C. – Arvind

+0

@Arvind dann nicht anrufen 'st.display();'. – Thomas

+0

@Arvind das liegt daran, dass Sie 'Anzeige' Methode der Klasse' State' mit seinem Objekt 'st' aufrufen. Entfernen Sie einfach 'st.display();' von der ** Hauptmethode **. – Yousaf

Verwandte Themen