Hallo, ich habe folgende beiden Klassen und ein großes Problem, siehe die Kommentare
und
Fehlermeldung:
Auto.java:16:8: cannot find symbol
symbol : method fahren2()
location: class Transportfahrzeug
tref.fahren2();
^
Transportfahrzeug ist von der Oberklasse und Auto von der Unterklasse, daher müsste das ganze doch als implizite Typkonvertierung gehen?
Ist ja wie bei den primitiven Datentypen:
double d;
int a = 2;
d = a;
funktioniert ja ohne weiteres.
Explizite Typkonvertierung funktioniert über casen:
double d = 2.6d;
int a;
a = (int) d;
mit Verlust der Genauigkeit und a==2
... Oder habe ich irgendwo einen Denkfehler drin? Muss ja so sein, der Compiler nimmts nicht an.
Schreibe morgen Prüfung und dachte eigentlich ich hätte alles verstanden....;(
Java:
class Transportfahrzeug
{
int ps;
public void fahren()
{
System.out.println("11111111");
}
}
und
Java:
class Auto extends Transportfahrzeug
{
public void fahren2()
{
System.out.println("22222222");
}
public static void main(String[] args)
{
Auto aref = new Auto(); //Es wird ein neues Objekt der Klasse Auto erzeugt und
//der Referenz "aref" zugeordnet.
Transportfahrzeug tref; //Es wird der Referenz "tref" ein Wertebereich zugeordnet,
//der Objekte der Oberklasse Transportfahrzeug und seiner
//Unterklassen aufnehmen kann.
//Lishkovshes Substitutionsprinzip: Überall wo eine
//Referenz auf eine Oberklasse akzeptiert wird,
//muss auch eine Unterklassenreferenz akzeptiert werden.
//Oder:
//Wo man ein Transportfahrzeug erwartet muss man auch
//mit einem Auto zufrieden sein
tref = aref; //Ein Objekt "Auto", welches wir in "aref" gespeichert haben, wird der
//Oberklassenreferenz "tref" zugewiesen
tref.fahren2(); //[B]Compiler-Fehler!?!?![/B]
}
}
Fehlermeldung:
Auto.java:16:8: cannot find symbol
symbol : method fahren2()
location: class Transportfahrzeug
tref.fahren2();
^
Transportfahrzeug ist von der Oberklasse und Auto von der Unterklasse, daher müsste das ganze doch als implizite Typkonvertierung gehen?
Ist ja wie bei den primitiven Datentypen:
double d;
int a = 2;
d = a;
funktioniert ja ohne weiteres.
Explizite Typkonvertierung funktioniert über casen:
double d = 2.6d;
int a;
a = (int) d;
mit Verlust der Genauigkeit und a==2
... Oder habe ich irgendwo einen Denkfehler drin? Muss ja so sein, der Compiler nimmts nicht an.
Schreibe morgen Prüfung und dachte eigentlich ich hätte alles verstanden....;(