Neue Java Klasse vom Typ Auto erstellen

Ich bin Java Anfänger und muss für Studium eine Aufgabe lösen, die hier schon mal in ähnlicher Form besprochen wurde, leider hackt es bei mir schon früher:
Vorgegeben ist eine Klasse EinfachesAuto

import java.util.Calendar;

public class EinfachesAuto {
     // Attribute
     public String besitzer;
     public String autotyp;
     public String farbe;
     public int erstzulassung;
     public int leistung;
     public int kmStand;

     // Konstruktor
     public EinfachesAuto(String besitzer, String autotyp, String farbe,
                          int erstzulassung, int leistung, int kmStand) {

         this.besitzer = besitzer;
         this.autotyp = autotyp;
         this.farbe = farbe;
         this.erstzulassung = erstzulassung;
         this.leistung = leistung;
         this.kmStand = kmStand;
     }

     // Methoden
     /** Berechnung des Alters des Autos aufgrund des aktuellen
      *  Kalenderjahrs und der Erstzulassung.
      *  @param ohne
      *  @return int alter
      */
     public int alter() {
        // Ermittlung des aktuellen Jahres
         Calendar aktuellerKalender = Calendar.getInstance();
         int aktuellesJahr = aktuellerKalender.get(Calendar.YEAR);
         return aktuellesJahr - this.erstzulassung;
     }

     /** Einfache Ausgabe auf den Bildschirm.
      *  @param ohne
      *  @return void
      */
     public void meldung() {
         System.out.print ("Hier gruesst das "+ this.farbe );
         System.out.println (" Auto von " + this.besitzer);
     }


    }

und
Dazu soll eine Testklasse AutoTest programiert werden, drei Objekte sollen erzeugt werden und deren Methoden aktiviert werden. Mit dieser Klasse soll dann die Klasse EinfachesAuto gestestet werden.


   public static void main(String args[]) {

     /** Erzeugen von Objekten der Klasse EinfachesAuto **/
     EinfachesAuto Auto1 = new EinfachesAuto("Jochen","VW Golf","silber",2005,145,865545);
     EinfachesAuto Auto2 = new EinfachesAuto("Sabine","Porsche Cayenne","blau",2009,240,227878);
     EinfachesAuto Auto3 = new EinfachesAuto("Dieter","Opel Astra","weiß",2007,76,451123);


     Auto1.besitzer = "Jochen";
	 Auto1.autotyp = "VW Golf";
	 Auto1.farbe = "silber";
	 Auto1.erstzulassung = 2005;
	 Auto1.leistung = 145;
	 Auto1.kmStand = 865545;

	 Auto2.besitzer = "Sabine";
	 Auto2.autotyp = "Porsche Cayenne";
	 Auto2.farbe = "blau";
	 Auto2.erstzulassung = 2009;
	 Auto2.leistung = 55;
	 Auto2.kmStand = 227878;

	 Auto3.besitzer = "Dieter";
	 Auto3.autotyp = "Opel Astra";
	 Auto3.farbe = "weiß";
	 Auto3.erstzulassung = 2007;
	 Auto3.leistung = 76;
     Auto3.kmStand = 451123;
    }
}

Ich habe beides erfolgreich kompiliert, aber beim Aufruf erfolgt eine Fehlermeldung:
Exception in thread „main“ java.lang.NoSuchMethodError: main

Beim suchen im Netz bin ich auf diesen Forum gestoßen und habe dazu diesen Thread gefunden, der mir aber leider nicht weiter half:
http://forum.byte-welt.net/showthread.php?t=1754
Ich komm einfach nicht weiter, auch mir qualmt der Kopf.:confused:

Du bist sicher, dass du die Klasse “AutoTest” zu starten versuchst? WIE versuchst du denn im Moment, das zu starten?

Bei mir ist der Code kompilierbar und fehlerfrei ausführbar.
Da du aber keine Ausgaben gemacht hast, wird auf dem Schirm nichts angezeigt.

Bist du sicher, dass du die Klassen aktuell hast und die richtige Klasse startest?

Außerdem gibts am Code mehrere Sachen zu bemängeln:
Klassennamen beginnen nach den Sun Coding Conventions mit einem großen Buchstaben, Methoden- und Variablennamen mit einem kleinen Buchstaben. Konstanten sollten komplett groß geschrieben werden.

In der OOP werden Eigenschaften von Objekten (Variablen) vor der Sichtbarkeit von außen (public) geschützt.
Instanzvariablen sollten daher immer private sein. Zugriffe zur Manipulation auf diese Variablen sollte nur über Methoden erlaubt werden.

Wenn du noch die Methode meldung() auf den Auto-Instanzen aufrufst, sollte alles funktionieren.

Mit der cmd und Textpad.

Die AutoTest kann ich fehlerfrei starten, nur erfolgt bei aufrufen der EinfachesAuto diese Meldung und es kommt keine Ausgabe bei der AutoTest.

[QUOTE=L-ectron-X]Bei mir ist der Code kompilierbar und fehlerfrei ausführbar.
Da du aber keine Ausgaben gemacht hast, wird auf dem Schirm nichts angezeigt.

Bist du sicher, dass du die Klassen aktuell hast und die richtige Klasse startest?

Außerdem gibts am Code mehrere Sachen zu bemängeln:
Klassennamen beginnen nach den Sun Coding Conventions mit einem großen Buchstaben, Methoden- und Variablennamen mit einem kleinen Buchstaben. Konstanten sollten komplett groß geschrieben werden.

In der OOP werden Eigenschaften von Objekten (Variablen) vor der Sichtbarkeit von außen (public) geschützt.
Instanzvariablen sollten daher immer private sein. Zugriffe zur Manipulation auf diese Variablen sollte nur über Methoden erlaubt werden.

Wenn du noch die Methode meldung() auf den Auto-Instanzen aufrufst, sollte alles funktionieren.[/QUOTE]

Genau, eigentlich sollen die Variablen

     private String autotyp;
     private String farbe;
     private int erstzulassung;
     private int leistung;
     private int kmStand;``` 
private heißen, nur bekommt dann die AutoTest.java keinen Zugriff mehr, ich weiß nicht wie ich dieses Problem lösen soll. Im von mir hier zitierten Thread waren die Variablen public.

Der Zugriff auf Variablen mit dem private Modifizierer geht doch wohl nur in der Klasse und im Paket und wie man Pakete macht wird erst in einer späteren Lerneinheit behandelt. Oder gibt es da noch ne andere Möglichkeit?

Wo genau meinst Du dass was falsch geschrieben ist?Groß/Kleinschreibung?

Nun ich habe an anderer Stelle weitere Probleme, ähnlich wie in den von mir zitierten Thread soll die Klasse Einfaches Auto erweitert werden und als Klasse Erweitertes Auto abgespeichert werden. Hier sollen zuätzlich
um folgende Attribute erweitert werden:

 private long fahrgestellnummer; ```

und folgende Methoden:
```public void alleDatenAusgeben()```
schreibt die Datenübersichtlich auf den Monitor,
```public int faehrtNach(String ziel, int entfernung) ```
Die Methode schreibt eine Meldung auf den Bildschirm:
Auto fährt von [Standort] nach [Ziel] [Entfernung] km
Speichert den neuen Standort und den neuen Kilometerstand
Rückgabewert: neuer kmStand

Ich habe folgenden Code geschrieben:
  public class ErweitertesAuto {

     // Attribute -> an Methode übergebende Werte

     public String besitzer;

     public String autotyp;

     public String farbe;

     public int erstzulassung;

     public int leistung;

     public int kmStand;



     // Zusatz Aufgabe Teil2

      String standort;

      long fahrgestellnummer;



     // Konstruktor und Parameter

     public ErweitertesAuto(String besitzer, String autotyp, String farbe,int erstzulassung, int leistung, int kmStand)

     {



        this.besitzer = besitzer;

        this.autotyp = autotyp;

        this.farbe = farbe;

        this.erstzulassung = erstzulassung;

        this.leistung = leistung;

        this.kmStand = kmStand;

	    this.standort = standort;      // Erweiterung des Konstruktors

		this.fahrgestellnummer = fahrgestellnummer;
		  }





     // Methoden

     /** Berechnung des Alters des Autos

     * @param ohne

     * @return int alter

     */



 public int alter() {
    // Ermittlung des aktuellen Jahres
     Calendar aktuellerKalender = Calendar.getInstance();
     int aktuellesJahr = aktuellerKalender.get(Calendar.YEAR);
     return aktuellesJahr - this.erstzulassung;
 }



      public String Ziel;

      public int Entfernung;





     public void meldung() {

        System.out.print ("Hier gruesst das "+ farbe +" ");

        System.out.print ("Auto von " + besitzer + ".

");

     }



     /** Zusatz Aufgabe Teil2 Alle Daten ausgeben **/

     public void alleDatenAusgeben() {

        System.out.println ("Daten des Fahrzeugs von " + besitzer +":

");

        System.out.println ("Autotyp: " + autotyp);

        System.out.println ("Farbe: " + farbe);

        System.out.println ("Erstzulassung: " + erstzulassung);

        System.out.println ("Leistung: " + leistung + " PS");

        System.out.println ("KM-Stand: " + kmStand);

        System.out.println ("Standort: " + standort);

        System.out.println ("Fahrgestellnummer: " + fahrgestellnummer + "

");

     }



        // Ausgabe Reise und neuer Kilometerstand



        public int faehrtNach(String ziel, int entfernung)  {


        System.out.println("Auto fährt von " + standort + " nach " + Ziel + " " + Entfernung + " km");

        standort = Ziel;

        kmStand += Entfernung;

        return kmStand;         // Ausgabe des aktuellen Kilometerstandes.

      }


    }``` als ErweitertesAuto.java

und

     public class AutoTest2 {

     public static void main(String args[]) {

     /** Erzeugen von Objekten der Klasse ErweitertesAuto **/
     ErweitertesAuto Auto1 = new ErweitertesAuto("Jochen","VW Golf","silber",2005,145,865545);
     ErweitertesAuto Auto2 = new ErweitertesAuto("Sabine","Porsche Cayenne","blau",2009,240,227878);
     ErweitertesAuto Auto3 = new ErweitertesAuto("Dieter","Opel Astra","weiß",2007,76,451123);




                 /** Zusatz Aufgabe Teil 2, Ausgabe der Daten **/
                 Auto1.alleDatenAusgeben();
                 Auto2.alleDatenAusgeben();
                 Auto3.alleDatenAusgeben();



     Auto1.besitzer = "Jochen";
	 Auto1.autotyp = "VW Golf";
	 Auto1.farbe = "silber";
	 Auto1.erstzulassung = 2005;
	 Auto1.leistung = 145;
	 Auto1.kmStand = 865545;

	 Auto2.besitzer = "Sabine";
	 Auto2.autotyp = "Porsche Cayenne";
	 Auto2.farbe = "blau";
	 Auto2.erstzulassung = 2009;
	 Auto2.leistung = 55;
	 Auto2.kmStand = 227878;

	 Auto3.besitzer = "Dieter";
	 Auto3.autotyp = "Opel Astra";
	 Auto3.farbe = "weiß";
	 Auto3.erstzulassung = 2007;
	 Auto3.leistung = 76;
     Auto3.kmStand = 451123;

                // Erweitern der Objekte
	 	       Auto1.standort = "Hamburg";
	 	       Auto2.standort = "Magdeburg";
	 	       Auto3.standort = "Kassel";
	 	       Auto1.fahrgestellnummer = 54802648;
	 	       Auto2.fahrgestellnummer = 65842308;
	           Auto3.fahrgestellnummer = 59752419;


          }
}

als AutoTest2.java
So lässt sich das auch kompilieren und ausführen, nur leider wird als Fahrgestellnr und Standort 0 bzw null
ausgegeben. Was mache ich da falsch?

Zweitens habe ich ja in diesem Code in ErweitertesAuto.java ja statt den dem private Modifizierer für fahrgestellnummer und fahrgestellnummer gar keinen verwendet und für die Attribute:


         public String autotyp;

         public String farbe;

         public int erstzulassung;

         public int leistung;

         public int kmStand;```

verwendet, weil sonst illegal access gemeldet wird bzw. symbol not found. Wie kann man das lösen, was mache ich da falsch?

Zugriffe über Methoden.
In etwa so:


public class EinfachesAuto {
     // Attribute
     private String besitzer;
     private String autotyp;
     private String farbe;
     private int erstzulassung;
     private int leistung;
     private int kmStand;

     // Konstruktor
     public EinfachesAuto(String besitzer, String autotyp, String farbe,
                          int erstzulassung, int leistung, int kmStand) {

         this.besitzer = besitzer;
         this.autotyp = autotyp;
         this.farbe = farbe;
         this.erstzulassung = erstzulassung;
         this.leistung = leistung;
         kmSetzen(kmStand);
     }
     
     //Typ zurückgeben
     public String gibAutoTyp() {
         return this.autotyp;
     }
     
     //Besitzer zurückgeben
     public String gibBesitzer() {
         return this.besitzer;
     }
     
     //Kilometerstand zurückgeben
     public int gibKmStand() {
         return kmStand;
     }
     
     public void kmSetzen(int kmStand) {
         this.kmStand = kmStand;
     }

     // Methoden
     /** Berechnung des Alters des Autos aufgrund des aktuellen
      *  Kalenderjahrs und der Erstzulassung.
      *  @param ohne
      *  @return int alter
      */
     public int alter() {
        // Ermittlung des aktuellen Jahres
         Calendar aktuellerKalender = Calendar.getInstance();
         int aktuellesJahr = aktuellerKalender.get(Calendar.YEAR);
         return aktuellesJahr - this.erstzulassung;
     }

     /** Einfache Ausgabe auf den Bildschirm.
      *  @param ohne
      *  @return void
      */
     public void meldung() {
         System.out.println("Der "+autotyp+" von "+this.besitzer+" ist "+
         this.farbe+" und "+alter()+" Jahre alt.");
         System.out.println("Der Motor des Wagens hat eine Leistung von "+
         this.leistung+" PS
und eine Laufleistung von bisher "+kmStand+" km
");
     }

}```

```class ErweitertesAuto extends EinfachesAuto {
    private String standort;
    private long fahrgestellnummer;

    public ErweitertesAuto(String besitzer, String autotyp, String farbe,
                            int erstzulassung, int leistung, int kmStand,
                            String standort, long fahrgestellnummer) {

      super(besitzer, autotyp, farbe, erstzulassung, leistung, kmStand);

      this.standort = standort;
      this.fahrgestellnummer = fahrgestellnummer;
    }
    
        // Ausgabe Reise und neuer Kilometerstand



    public int faehrtNach(String ziel, int entfernung)  {

        System.out.println(gibBesitzer()+" fährt mit seinem "+gibAutoTyp()+" von "+
        standort+" nach "+ziel+" " + entfernung + " km");

        standort = ziel;
        int kmStand = gibKmStand();
        kmSetzen(kmStand += entfernung);
        
        System.out.println("Der Tachostand zeigt nun eine Laufleistung von "+gibKmStand()+" km");

        return gibKmStand();         // Ausgabe des aktuellen Kilometerstandes.

    }
  
     /** Einfache Ausgabe auf den Bildschirm.
      *  @param ohne
      *  @return void
      */
     public void meldung() { //überschriebene Methode (Vererbung)
         super.meldung();
         System.out.println("Der "+gibAutoTyp()+" mit der Fahrgestellnummer "+
         this.fahrgestellnummer+" befindet sich in "+standort+".");
     }
}```

```class AutoTest {
   public static void main(String args[]) {
     /** Erzeugen von Objekten der Klasse EinfachesAuto **/
     EinfachesAuto vw = new EinfachesAuto("Jochen","VW Golf","silber",2005,145,865545);
     EinfachesAuto porsche = new EinfachesAuto("Sabine","Porsche Cayenne","blau",2009,240,227878);
     EinfachesAuto opel = new EinfachesAuto("Dieter","Opel Astra","weiß",2007,76,451123);
     vw.meldung();
     porsche.meldung();
     opel.meldung();
     
     ErweitertesAuto trabant = new ErweitertesAuto("Klaus","Trabant 601","himmelblau",
     1990,26,250000,"Berlin",3096099);
     trabant.meldung();
     
     trabant.faehrtNach("Potsdam",40);

   }
}```

Super, ich danke Dir, Du hast mich gerettet!!! Dafür bin ich Dir was schuldig.