Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
super operator und incompatible types, simple fehler
class X {}
class Y extends X {}
class Test {
public static void main(String[] args) {
X x = new X();
Y y = new Y();
X a = new Y();
Y b = new X();
}
}
kann mit dem fehler "incompatible types " zwar was anfangen, da er wohl in nach line 19 den Y Wert sucht und keinen findet aber wie ich das Problem löse ist mir vollkommen unklar.
hier eine unterklasse, bezieht sich aber nicht auf die x hier drüber
Code:
class Y extends X {
int b;
Y(int b) {
super(a);
this.b = b;
}
}
was ist am super falsch ? hatte mal eine ausgeben methode und dort auch mit super gearbeitet. macht ja nichts anderes als methode und attribute in einer unterklasse aufzurufen, sofern ich das richtig verstanden habe.
würd mich freuen wenn ihr mir die fehler beseitigen könntet
class Y extends X {
int b;
Y(int b) {
super(a);
this.b = b;
}
}
was ist am super falsch ? hatte mal eine ausgeben methode und dort auch mit super gearbeitet. macht ja nichts anderes als methode und attribute in einer unterklasse aufzurufen, sofern ich das richtig verstanden habe.
1. Sehe ich hier nirgends eine Variable mit dem Namen "a". Das könnte das Problem sein.
2. Muss der Konstruktor der Klasse X eine Variable von dem Typ welcher "a" hat annehmen können.
EDIT:
Anonymous hat gesagt.:
Hallo, hier die erste Klasse
Code:
class X {}
class Y extends X {}
class Test {
public static void main(String[] args) {
X x = new X();
Y y = new Y();
X a = new Y();
Y b = new X();
}
}
kann mit dem fehler "incompatible types " zwar was anfangen, da er wohl in nach line 19 den Y Wert sucht und keinen findet aber wie ich das Problem löse ist mir vollkommen unklar.
"da er wohl in nach line 19 den Y Wert sucht und keinen findet" Was du hiermit meinst ist mir nicht klar =)
Naja lösen kannst du das nicht. Eine Referenz vom Typ "Y" kann nicht auf ein Objekt vom Typ "X" zeigen. Darum auch der Compiler Error "incompatible types"
danke erstmal für deine mühe. ich fasse nochmal für mein verständnis zusammen.
sofern ich in der class y mit dem konstruktor b einen wert zuteile und dann super(b) in der class x schreiben würde dann würde der werd dieser klasse übergeben werden. (soweit hatte ich das ja auch schon verstanden)
nur will ich aus der class x durch den operator super der class y die variable a übergeben.
Alles wäre toll, wenn nicht der Fehler "call to super must be first statement in constructor" kommen würde
aber selbst wenn es an erster stelle im konstruktor steht kommt der fehler.
darum würde es mich freuen wenn mir jemand sagen könnte wie ich mit dem operator super in der classe y umzugehen habe,damit dieser die variable a übergibt.
Also was Du da schreibst ergibt wenig Sinn. Die Fehlermeldung "call to super must be first statement in constructor" sagt Dir, wie Du richtig annimmst, dass vor dem super-Aufruf nichts anderes passieren darf. Wenn Du also "super(a);" in die erste Zeile des Konstruktors schreibst, dann kommt nicht der selbe Fehler, sondern ein anderer: "a cannot be resolved".
Dies sagt Dir: Im Konstrukter der Klasse 'Y' ist das Symbol "a" nicht verfügbar. Ist doch logisch, der Konstruktor bekommt ja nur "b" als Parameter. Vielleicht willst Du ja sowas schreiben:
Code:
class Y extends X {
int b;
Y(int a, int b) {
super(a);
this.b = b;
}
}
Oder sowas:
Code:
class Y extends X {
int b;
Y(int b) {
super(b);
this.b = b;
}
}
Oder sowas:
Code:
class Y extends X {
int b;
Y(int b) {
super(-1);
this.b = b;
}
}