Klassen casten, IS-A Beziehung

Snake87

Mitglied
Hallo Leute,

bereite mich gerade auf die OCA Prüfung vor und verstehe folgende Frage nicht so ganz.

Hier erstmal der Quellcode der vorgeben ist:
Java:
interface I{
}
class A implements I{
}

class B extends A {
}

class C extends B{
}

Es werden zwei Instanzen erzeugt:
Java:
A a = new A();
B b = new B();

Die Frage ist welche von den 4 Zuweisungen ist richtig:
Code:
1. a = (B)(I)b;
2. b = (B)(I) a
3. a = (I) b;
4. I i = (C) a;

Richtig ist 1., nur warum ist das so?
Vielleicht könnte ihr mir ja mal sagen wie genau das mit dieser IS-A Beziehung funktioniert?!
Bzw. was an der 2.,3. und 4. falsch ist.


Danke schon mal im vorraus!
 
irgendwo muss das Wissen anfangen, wie soll man näher erklären, dass 1+1 nicht 3 ist?
was ist eine Klasse, was bedeutet davon zu erben usw., das musst du doch wissen/ nachlesen?

hier zuletzt allerdings eine schöne Erklärungs-Variante 😉 :
http://www.java-forum.org/java-basics-anfaenger-themen/147136-classcast.html#post984063
der ganze Thread letztlich ähnlich

-----

ansonsten:
fange an, eine Klasse A zu programmieren, noch ohne weitere Interface/ Klassen
Java:
class A {
}

geht
[c]A a = new Object(); // oder String, oder sonst irgendein Objekt[/c]
?
warum/ warum nicht, schon zu schwer?
 
Hallo,

danke dir erstmal für den Link der hat mit sehr weitergeholfen und hab das Prinzip nun endlich
verstanden. Nur was hat das für ein Vorteil das man b zuerst in I castet und dann in
B? (vielleicht gibt es ja auch keinen...)
Denn wenn ich das richtig verstanden habe, könnte ich ja auch direkt nach B casten.
 
nicht mal das, b ist schon vom Typ B, das reicht aus,
> a = b;
ginge, der Rest ist Spielerei für die Aufgabe

wie man aber an Punkt 2 sieht sind Details durchaus wichtig,
da sieht es für den Compiler recht ähnlich aus, er kann auf diesem Wege nicht mehr mithelfen,
funktionieren wird es aber nicht
 
Hallo,
danke dir erstmal für den Link der hat mit sehr weitergeholfen und hab das Prinzip nun endlich verstanden.
Nur was hat das für ein Vorteil das man b zuerst in I castet und dann in B?
Man könnte doch auch direkt schreiben:

Code:
a = (B) b

Oder hab ich da noch irgendetwas nicht verstanden...
 

Zurück
Oben