Hi Maze!
Wenn der angegebene Code wirklich das ist, was du übersetzen willst, dann hast du ne Menge Fehler in die paar Zeilen gepackt ;o) Also erstmal die Fehler:
class Ueberschreiben {
public string a = „Orignial“;
Die Klasse heißt String - beachte das große S
System.out.println (A);
Du rufst hier eine Methode eines anderen Objektes (System.out) auf. Das macht nur Sinn, wenn du eine Instanzvariable initialisieren willst oder innerhalb von anderen Methoden. Da du hier den Inhalt vom String ausgeben willst, gehört diese Ausgabe sicherlich in den Konstruktor (siehe unten). Das A muss klein geschrieben sein, da Java Case sensitiv ist!!
}
class Ueberschrieben extends Ueberschreiben {
Hätte fast den Unterschied übersehen ie - ei. Nur zum Verständnis: Die Klasse wird nicht überschrieben, sondern vererbt. Lediglich Methoden der übergeordneten Klasse können überschrieben werden.
public string a = „Ueberschrieben“;
Und genau das ist hier falsch. Die Variable a existiert in der Superklasse schon und kann hier nicht nochmal definiert werden.
Wenn die abgeleitete Klasse einen anderen Inhalt haben möchte, dann kann dieser im Konstruktor verändert werden. (siehe unten)
System.out.println (A);
Super();
Auch hier wieder die gleichen Probleme wie oben. Bei Super() handelt es sich um den Aufruf des Konstruktors der Superklasse. Dieser MUSS immer als erstes erfolgen. - super(), s klein
}
Was ich ganz vermisse ist eine main-Methode.
UNTEN:
class Ueberschreiben {
public String a = „Orignial“;
Ueberschreiben() {
System.out.println(a);
}
}
class Ueberschrieben extends Ueberschreiben {
Ueberschrieben() {
super();
a=„Uberschrieben“;
System.out.println (a);
}
}
public class Test() {
public static void main(tring[] args) {
Ueberschrieben a=new Ueberschrieben();
Ueberschreiben b=new Ueberschrieben();
Ueberschreiben c=new Ueberschreiben();
}
}
Das super() kann man sich auch sparen, da der Kompiler auf jeden Fall ein super() am Anfang des Konstruktors einbaut. Der Grund ist der, daß das initialisieren eine strikte Reihenfolge haben muss!!! Von der obersten Klasse nach unten. Damit soll sichergestellt werden, daß die abgeleitete Klasse die geerbten Instanzvariablen komplett initialisiert vorfindet.
Warum gibt es dann das super()??? Da der Kompiler das super() selbst einfügt, könnte man hierauf tatsächlich verzichten, aber es gibt ja auch noch Konstruktoren mit Parametern. Wenn eine abgeleitete Klasse eben nicht den default-Konstruktor der Superklasse aufrufen möchte, dann braucht man das super(…). Auf dein Beispiel angewendet:
class Ueberschreiben {
public String a = null;
Ueberschreiben() {
Ueberschreiben( „Orignial“ );
}
Ueberschreiben(String s) {
a=s;
System.out.println(a);
}
}
class Ueberschrieben extends Ueberschreiben {
Ueberschrieben() {
super(„Uberschrieben“);
System.out.println (a);
}
}
…
Rest siehe oben.
So, bevor es ein komplettes Java-Tutorial wird hör ich lieber auf ;o)
Gruß
Benky