Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » Java Klassen, Subklassen Compilier-/Laufzeitfehler » Antwort erstellen » Hallo Gast [Anmelden|Registrieren]

Antwort erstellen
Benutzername: (du bist nicht eingeloggt!)
Thema:
Nachricht:

HTML ist nicht erlaubt
BBCode ist erlaubt
Smilies sind erlaubt
Bilder sind erlaubt

Smilies: 21 von 33
smileWinkDaumen hoch
verwirrtAugenzwinkerngeschockt
Mit ZungeGottunglücklich
Forum Kloppebösegroßes Grinsen
TanzentraurigProst
TeufelSpamWillkommen
LehrerLOL HammerZunge raus
Hilfe 
aktuellen Tag schließen
alle Tags schließen
fettgedruckter Textkursiver Textunterstrichener Text zentrierter Text Hyperlink einfügenE-Mail-Adresse einfügenBild einfügen Zitat einfügenListe erstellen CODE einfügenPHP CODE farbig hervorheben
Spamschutz:
Text aus Bild eingeben
Spamschutz

Die letzten 2 Beiträge
as_string

Warum nicht einfach erstmal ausprobieren.
Ergebnis: 3 und 6 führen zu einem Compiler-Fehler, weil in beiden Fällen implizit von einer allgemeineren auf eine speziellere Klasse gecastet wird bei der Zuweisung.
1 und 4 führen zu einem Laufzeitfehler. Da steht zur Compilezeit streng genommen noch nicht fest, dass bei dem expliziten Cast, der im Code steht, rechts davon eine allgemeinere Klasse steht. Zur Laufzeit dann aber schon, so dass es erst dann einen Fehler gibt.

Allgemein: Ich darf ein Objekt, das "in echt" eine allgemeinere Klasse ist niemals auf eine speziellere casten. Allerdings, wenn ich eine Variable oder den Rückgabewert einer Methode oder so habe, die eigentlich per Deklaration einen allgemeineren Typ zurückgibt, kann es ja sein, dass sie zur Laufzeit trotzdem auch mal speziellere Objekte generiert (oder eine Variable hält), so dass der Cast funktionieren kann. In solchen Fällen sollte man dann aber immer vorher testen (also zur Laufzeit, im Code), ob es in Wirklichkeit tatsächlich der speziellere Typ ist, bevor man den Cast macht, um eben solche Laufzeitfehler zu vermeiden.
In Zeile 1 und 4 macht das new A() jeweils ein neues Objekt vom Typ A. Zur Compilezeit ist nicht sicher klar, dass es nicht auch ein spezielleres sein könnte, weshalb dort der Cast zu B ersteinmal zugelassen wird (wobei es glaub ich Tools gibt, die in einem solchen Fall auch schon zumindest warnen würden, aber der Java Compiler untersucht das nicht weiter, weshalb er es einfach compiliert).

Die Fälle 2 und 5 casten immer nur von einem spezielleren zu einen allgemeineren Typ. Egal ob zur Compile- oder Laufzeit ist das immer ok, weshalb es auch problemlos compiliert und ausgeführt wird.

Gruß
Marco
mantrix Java Klassen, Subklassen Compilier-/Laufzeitfehler

Meine Frage:
Gegeben sind eine Klasse A und ihre Subklasse B.

code:
1:
2:
class A {}
class B extends A {}


Geben Sie für folgende Zuweisungen an, ob diese zu einem Kompilierfehler, Laufzeitfehler (in Form einer Exception) oder zu keinem Fehler führen.

code:
1:
2:
3:
4:
5:
6:
A test1 = (B)new A();
A test2 = (A)new B();
B test3 = (A)new B();
B test4 = (B)new A();
A test5 = (B)new B();
B test6 = (A)new A();


Meine Ideen:
Ich verstehe noch nicht ganz, wann es zu Kompilierfehlern und wann zu Laufzeitfehlern kommt.
Ich denke, dass es bei 3 und 6 zu Kompilierfehlern kommt, weil A nicht zu B konvertiert werden kann.

Bei 2 sollte es zu keinem Fehler kommen, weil B ja Subtyp von A ist, aber wie sieht es bei 5 aus? (ist 5 das gleiche weil im Endeffekt doch zu A gecastet wird?)

Bei 1 und 4 bin ich aufgeschmissen..

MfG