hallo,
ich habe eine frage zu folgender aufgabe:
a) gegeben sei das folgende JAVA-Programm. Dieses Programm gibt 6 Zeilen Text in der Form v[0]: Unterklasse(Oberklasse(name= Attribut(name1)), name=2) auf der Konsole aus. Tragen Sie die Ausgabe an den markierten Stellen in den Kommentaren ein:
jetzt meine ergebnisse:
In der Klasse "Programm" wird zunächst in der main-methode ein array mit dem namen v vom Typ Ober und mit ingesamt 3 feldern erzeugt. Das 1. feld v[0] zeigt auf ein Objekt vom Typ Unter. Beim erzeugen des objektes wird gleichzeitig der konstruktor Unter(int i) der unterklasse aufgerufen. der aktuelle parameter 15 wird dem formalen parameter als wert zugewiesen.
In diesem konstruktor wird mit dem this-befehl der parameterlose Konstruktor der eigenen Klasse, also Unter(){super100} aufgerufen.
Dieser ruft wiederum mit super-befehl den konstruktor der Oberklasse Ober(int i) auf und weist dem formalen parameter i den wert 100 zu. in diesem konstruktor zeigt die referenzvariable verw vom typ Verwendet auf ein neu erzeugtes Objekt vom typ Verwendet. der formale parameter i dieses objekts bekommt den wert 100 zugewiesen und dieser wird sofort an den konstruktor Verwendet(int i) der Klasse Verwendet weitergeleitet.
und last but not least wird die variable a in diesem konstruktor mit 100 initialisiert.
(ich hoffe ich konnte mich gut ausdrücken). auf jeden fall hat a den wert 100. aber was ist mit b? nun ja, das was ich oben beschrieben habe, war nur der this-teil des konstruktors Unter in der klasse Unter. wir erinnern uns, dass diesem konstruktor zu beginn der wert 15 zugewiesen wurde. und aus dieser 15 wird die zahl 20, da b = i + 5 = 15 + 5.
=> a = 100, b = 20
nun geh ich über zum 2. System.out.println-befehl. um herauszufinden was hier ausgegeben wird, muss ich ja, die v[1] = v[0].kopie(); auswerten.
und genau hier habe ich probleme. also ich weiß, dass ein array auch aus referenzen bestehen kann. sprich: v[0] ruft den konstruktor kopie() der Klasse Unter auf. und wird dieser auf dem feld v[1] zugewiesen? das heißt doch dass auch v[1] auf den konstruktor zeigt, bzw. den konstruktor aufruft. oder? nun ich nehme mal an, dass es stimmt. wird in diesem konstruktor kopie() {return new Unter(this)} ein objekt erzeugt? und was bedeutet das "this" in der klammer?
ich kannte das "this" immer nur im zusammenhang mit referenzen.
ich weiß, dass es viel text, aber ich hoffe, jmd. hilft mir bei dieser analyse. ich möchte zunächst einmal nur wissen, was dieses "this" zu bedeuten hat. mehr brauche ich im moment nicht. vielen dank schon ma im voraus.
ich habe eine frage zu folgender aufgabe:
a) gegeben sei das folgende JAVA-Programm. Dieses Programm gibt 6 Zeilen Text in der Form v[0]: Unterklasse(Oberklasse(name= Attribut(name1)), name=2) auf der Konsole aus. Tragen Sie die Ausgabe an den markierten Stellen in den Kommentaren ein:
Java:
class Verwendet
{
int a;
Verwendet (int i)
{
a = i;
}
public String toString()
{
return "Verwendet(a=" + a + ")";
}
}
Java:
class Ober
{
Verwendet verw;
Ober(Ober o)
{
verw = o.verw;
}
Ober (int i)
{
verw = new Verwendet(i);
}
public String toString()
{
return "Ober(verw=" +verw+ ")";
}
void f(int x)
{
verw.a += x;
}
Ober kopie()
{
return new Ober(this);
}
}
Java:
class Unter extends Ober
{
int b = 4;
Unter()
{
super(100);
}
Unter(Unter o)
{
super(o);
b = o.b;
}
Unter(int i)
{
this();
b = i+5;
}
public String toString()
{
return "Unter(" + super.toString() + " , b =" + b + ")";
}
void f(int x)
{
super.f(x);
b -= x;
}
void f(short x)
{
b += x;
}
Unter kopie()
{
return new Unter(this);
}
}
Java:
class Programm
{
static public void main (String [] p)
{
Ober[] v = new Ober[3];
v[0] = new Unter(15);
v[1] = v[0].kopie();
System.out.println("v[0] : " + v[0]); //Unter(Ober(verw=Verwendet(a=___)), b=___)
System.out.println("v[1] : " + v[1]); //Unter(Ober(verw=Verwendet(a=___)), b=___)
v[0].f(1);
System.out.println("v[0] : " + v[0]); //Unter(Ober(verw=Verwendet(a=___)), b=___)
System.out.println("v[1] : " + v[1]); //Unter(Ober(verw=Verwendet(a=___)), b=___)
v[1].f((short)2);
System.out.println("v[0] : " + v[0]); //Unter(Ober(verw=Verwendet(a=___)), b=___)
System.out.println("v[1] : " + v[1]); //Unter(Ober(verw=Verwendet(a=___)), b=___)
}
}
jetzt meine ergebnisse:
In der Klasse "Programm" wird zunächst in der main-methode ein array mit dem namen v vom Typ Ober und mit ingesamt 3 feldern erzeugt. Das 1. feld v[0] zeigt auf ein Objekt vom Typ Unter. Beim erzeugen des objektes wird gleichzeitig der konstruktor Unter(int i) der unterklasse aufgerufen. der aktuelle parameter 15 wird dem formalen parameter als wert zugewiesen.
In diesem konstruktor wird mit dem this-befehl der parameterlose Konstruktor der eigenen Klasse, also Unter(){super100} aufgerufen.
Dieser ruft wiederum mit super-befehl den konstruktor der Oberklasse Ober(int i) auf und weist dem formalen parameter i den wert 100 zu. in diesem konstruktor zeigt die referenzvariable verw vom typ Verwendet auf ein neu erzeugtes Objekt vom typ Verwendet. der formale parameter i dieses objekts bekommt den wert 100 zugewiesen und dieser wird sofort an den konstruktor Verwendet(int i) der Klasse Verwendet weitergeleitet.
und last but not least wird die variable a in diesem konstruktor mit 100 initialisiert.
(ich hoffe ich konnte mich gut ausdrücken). auf jeden fall hat a den wert 100. aber was ist mit b? nun ja, das was ich oben beschrieben habe, war nur der this-teil des konstruktors Unter in der klasse Unter. wir erinnern uns, dass diesem konstruktor zu beginn der wert 15 zugewiesen wurde. und aus dieser 15 wird die zahl 20, da b = i + 5 = 15 + 5.
=> a = 100, b = 20
nun geh ich über zum 2. System.out.println-befehl. um herauszufinden was hier ausgegeben wird, muss ich ja, die v[1] = v[0].kopie(); auswerten.
und genau hier habe ich probleme. also ich weiß, dass ein array auch aus referenzen bestehen kann. sprich: v[0] ruft den konstruktor kopie() der Klasse Unter auf. und wird dieser auf dem feld v[1] zugewiesen? das heißt doch dass auch v[1] auf den konstruktor zeigt, bzw. den konstruktor aufruft. oder? nun ich nehme mal an, dass es stimmt. wird in diesem konstruktor kopie() {return new Unter(this)} ein objekt erzeugt? und was bedeutet das "this" in der klammer?
ich kannte das "this" immer nur im zusammenhang mit referenzen.
ich weiß, dass es viel text, aber ich hoffe, jmd. hilft mir bei dieser analyse. ich möchte zunächst einmal nur wissen, was dieses "this" zu bedeuten hat. mehr brauche ich im moment nicht. vielen dank schon ma im voraus.