G
Giles
Gast
Hallo!
Ich habe hier eine Aufgabe, in der eine Ausgabe begründet werden soll.
Ich habe mir zu allen Ausgaben Gedanken gemacht, und möchte gerne wissen, ob meine Begründungen richtig sind.
Die unten erklärte Ausgabe der '5' verstehe ich leider nicht. Die der 201 kann ich mir nur erraten.
Hier Drei Klassen:
Die main hat folgende Ausgabe:
Meine Begründung wäre:
Zunächst wird ein Objekt z der Klasse Z erzeugt. z enthält ein statisches b=3 und gehört zur Klasse Y, die ein statisches a=7 enthält. z.a ergibt also 7.
Da die Klasse Z bereits eine Methode static int get(X x) enthält, wird diese für get(z) auch verwendet. Sie gibt das a aus dem übergebenen Objekt x der Klasse X zurück, welches 4 beträgt.
Da die Klasse Z bereits eine Methode int get() enthält, wird beim Aufruf x.get() diese Methode auf das Objekt x der Klasse X angewandt. Da das b statisch den Wert 3 hat, und a aus der Oberklasse von Z geholt wird, da Z selbst kein a besitzt, wird a+b=3+7=10 zurückgegeben.
Bei dem Aufruf z.set('c'); wird eine Methode set(char c) gesucht. Da diese in der Klasse Z selbst nicht existiert, wird die Oberklasse Y betrachet. Dort ist eine solche Methode set(char c) vorhanden und daher auch verwendet. Sie verändert den statischen Wert von a innerhalb der Klasse Y auf a*c. (Hier verwundert mich jedoch, dass eine Zuweisung int = int * char funktioniert. Kann mir das jemand noch bitte erklären ???:L .) Ich rate an dieser Stelle einfach mal und behaupte 'c' hat eine Art ASCI Code mit dem Wert 99(?) get(z) liefert mit der gleichen Begründung wie oben wieder den Wert 4.
z.get() ist der Methodenaufruf get() aus der Klasse Z auf das Objekt z angewandt. Sie gibt zurück: das statische (b=3) + das statische a, welches aus der Klasse Y geholt wird. Dieses a hat den Wert 198, da 'c' den ASCI Wert 99 hat (?) 198+3=201.
y.set(2) wird aufgerufen. Gesucht ist nun eine Methode set(int i), welche auch in der Klasse Z gefunden und damit verwendet wird. a wird hier auf 3*i gesetzt. Da der Parameter beim Aufruf den Wert 2 hat, wird a also den Wert 3*2=6 zugewiesen. z.get() gibt wieder b+a zurück, wobei b unverändert 3 ist und a den Wert 6 hat, sollte doch eigentlich 9 statt 5 ausgegeben werden (?).
z.set(y,0) wird aufgerufen, in der das statische a aus dem Objekt y der Klasse Y auf 0 gesetzt wird.
y.get() gibt b+a=3+0=3 aus.
Sind bei den Begründungen, die zu den Ausgaben passen, die Begründungen auch wirklich richtig?
Vielen Dank im vorraus
mfG Giles
Ich habe hier eine Aufgabe, in der eine Ausgabe begründet werden soll.
Ich habe mir zu allen Ausgaben Gedanken gemacht, und möchte gerne wissen, ob meine Begründungen richtig sind.
Die unten erklärte Ausgabe der '5' verstehe ich leider nicht. Die der 201 kann ich mir nur erraten.
Hier Drei Klassen:
Code:
public class X
{
int a = 4;
int get() {return a;}
}
Code:
public class Y extends X
{
static int a = 7;
int get() {return a;}
static void set(int x){a=x;}
static void set(char c){a=2*c;}
}
Code:
class Z extends Y
{
static int b = 3;
int get() { return b+a; }
static int get(X x){ return x.a; }
static void set(int i){ a = 3*i; }
static void set(X x, int i){ a = i; }
public static void main(String[] args){
Z z=new Z();
X x=z;
Y y=z;
System.out.println(z.a);
System.out.println(get(z));
System.out.println(x.get());
z.set('c');
System.out.println(get(z));
System.out.println(z.get());
y.set(2);
System.out.println(z.get());
z.set(y, 0);
System.out.println(y.get());
}
}
Die main hat folgende Ausgabe:
Code:
7
4
10
4
201
5
3
Meine Begründung wäre:
Zunächst wird ein Objekt z der Klasse Z erzeugt. z enthält ein statisches b=3 und gehört zur Klasse Y, die ein statisches a=7 enthält. z.a ergibt also 7.
Da die Klasse Z bereits eine Methode static int get(X x) enthält, wird diese für get(z) auch verwendet. Sie gibt das a aus dem übergebenen Objekt x der Klasse X zurück, welches 4 beträgt.
Da die Klasse Z bereits eine Methode int get() enthält, wird beim Aufruf x.get() diese Methode auf das Objekt x der Klasse X angewandt. Da das b statisch den Wert 3 hat, und a aus der Oberklasse von Z geholt wird, da Z selbst kein a besitzt, wird a+b=3+7=10 zurückgegeben.
Bei dem Aufruf z.set('c'); wird eine Methode set(char c) gesucht. Da diese in der Klasse Z selbst nicht existiert, wird die Oberklasse Y betrachet. Dort ist eine solche Methode set(char c) vorhanden und daher auch verwendet. Sie verändert den statischen Wert von a innerhalb der Klasse Y auf a*c. (Hier verwundert mich jedoch, dass eine Zuweisung int = int * char funktioniert. Kann mir das jemand noch bitte erklären ???:L .) Ich rate an dieser Stelle einfach mal und behaupte 'c' hat eine Art ASCI Code mit dem Wert 99(?) get(z) liefert mit der gleichen Begründung wie oben wieder den Wert 4.
z.get() ist der Methodenaufruf get() aus der Klasse Z auf das Objekt z angewandt. Sie gibt zurück: das statische (b=3) + das statische a, welches aus der Klasse Y geholt wird. Dieses a hat den Wert 198, da 'c' den ASCI Wert 99 hat (?) 198+3=201.
y.set(2) wird aufgerufen. Gesucht ist nun eine Methode set(int i), welche auch in der Klasse Z gefunden und damit verwendet wird. a wird hier auf 3*i gesetzt. Da der Parameter beim Aufruf den Wert 2 hat, wird a also den Wert 3*2=6 zugewiesen. z.get() gibt wieder b+a zurück, wobei b unverändert 3 ist und a den Wert 6 hat, sollte doch eigentlich 9 statt 5 ausgegeben werden (?).
z.set(y,0) wird aufgerufen, in der das statische a aus dem Objekt y der Klasse Y auf 0 gesetzt wird.
y.get() gibt b+a=3+0=3 aus.
Sind bei den Begründungen, die zu den Ausgaben passen, die Begründungen auch wirklich richtig?
Vielen Dank im vorraus
mfG Giles