Die alten Klausuren sind auf der Vorlesungsseite zu finden:
http://progra.c-otto.de als inoffizielle Abkuerzung
A1)
new Y() ruft den Konstruktor Y() auf. Dieser ruft zuerst implizit den Konstruktor X() auf. Bevor dieses X-Objekt erzeugt wird, werden die Attribute wert1 und wert2 von Klasse X mit 1 bw. 2 initialisiert. Die Anweisung wert1 = wert1 + wert2 sorgt also dafuer, dass die Attribute wert1/2 von X anschliessend 3 und 2 sind. Nach Beendingung des X-Konstruktors wird die Anweisung wert1 = wert1 + wert2 im Y-Konstruktor ausgefuehrt. Hier bezieht sich wert2 auf das Attribut in der Klasse Y, was mit 3 initialisiert wurde. Anschliessend gilt also wert1 in X ist 6 (3 + 3), wert2 in X ist unveraendert 2, wert2 in Y ist unveraendert 3. In der Ausgabe bezieht sich y.wert1 auf das Attribut feld1 in Klasse X (also 6), aufgrund der Deklaration der Variablen y bezieht sich y.wert2 auf das Attribut in Klasse Y (also 3).
A3)
Deine Frage verstehe ich nicht wirklich. Die Klasse soll abstrakt sein, ja. Ich denke, das ist klar. Die Eigenschaft einer eindeutigen Nummer (oder ID) ist jedem Inventarstueck gemeinsam. Es macht daher Sinn, dieses Attribut ganz oben in der Objekthierarchie anzuordnen. Das wurde in der Musterloesung auch gemacht. Zugriffe auf dieses Attribut kann man dann ueber entsprechende Getter/Setter ermoeglichen, das hat aber nichts mit dieser Aufgabe zu tun.
Wenn die Frage so gemeint ist, wo denn der Sinn ist, eine eigene (abstrakte) Klasse einzufuehren, obwohl nur eine simple Zahl gespeichert wird:
Mit dieser Klassenhierarchie ist es moeglich, Inventarstuecke unabhaengig von ihrer konkreten Instanz (Schmuck, Antikmoebel, ...) zu behandeln. Man kann beispielsweise Methoden aufrufen, die jedes Inventarstueck hat (hier in dieser Aufgabe ist keine solche Methode genannt) oder andere Funktionalitaeten programmieren, fuer die die konkrete Instanz irrelevant ist. Ueblich ist beispielsweise die Objekte in einer Liste zu speichern, was man mit neuerem Java dann durch List<Inventarstueck> deklarieren koennte. In dieser Liste kann man dann alle moeglichen Inventarstuecke sammeln.
Wichtig ist hier, den Sinn einer abstrakten Klasse zu sehen. Man hat niemals (!) ein Objekt, was einfach nur eine Nummer hat. Man hat immer eine speziellere Instanz, die auch (!) eine Nummer hat. Wenn man aber nicht an spezielleren Eigenarten interessiert ist, reicht es aus den Datenspeicher (Liste, Variable, ...) vom Typ der Abstrakten Klasse anzulegen und damit zu arbeiten.
Ciao,
Carsten
Dr. rer. nat. Carsten Otto
http://verify.rwth-aachen.de/otto/