TypeCast Fehler

Status
Nicht offen für weitere Antworten.

JayBee

Neues Mitglied
Ich hab einige Fragen bezüglich Typecast Fehlern die mir vielleicht einer von euch beantworten kann.
Über google und Forumssuche hab ich leider nix gefunden ausser dem kurzen Schnippsel aus dem Java 2 Platform SDK:

public class ClassCastException
extends RuntimeException

Thrown to indicate that the code has attempted to cast an object to a subclass of which it is not an instance. For example, the following code generates a ClassCastException:
Code:
Object x = new Integer(0);
System.out.println((String)x);

Meine Fragen (bzw. Prüfungsfragen) dazu wären:
Beschreiben sie genau, worin der Fehler besteht.
Warum tritt der Fehler zur Laufzeit und nicht zur Kompilierzeit auf?
Wieso lässt Java solche Fehler überhaupt zu?
Was kann Java manchmal erst zur Laufzeit wissen?
Wieso kann es das erst zur Laufzeit wissen?

Also im Grunde is mir klar dass ich ein Obekt nicht in eine Unterklasse casten darf von der es keine Instanz is aber trotzdem bin ich nicht in der Lage diese Fragen präzise zu beantworten.
Bin für jede Hilfe dankbar. Auch gern in Form von Links zu Websiten (gern auch englischsprachig) die sich mit der Thematik beschäftigen.

Vielen Dank schon mal im Voraus.
 
Och, so ist das doch langweilig. Schreib' einfach, was du denkst ("The Art of Bullshit writing") und wir ziehen dann über dich her, und machen uns drüber lustig, wie unendlich falsch deine Antworten doch waren :bae:
 
Marco13 hat gesagt.:
Och, so ist das doch langweilig. Schreib' einfach, was du denkst ("The Art of Bullshit writing") und wir ziehen dann über dich her, und machen uns drüber lustig, wie unendlich falsch deine Antworten doch waren :bae:

...und das würde dich befriedigen? :shock:
 
Ok dann von mir aus etwas "Bullshit-writing". Ich versuch mal die Fragen anhand des Beispiels aus der Vorlesung zu beantworten:

Code:
public class Test {
	public static void main (String[] args) {
		Gabel gabel = new Gabel();
		Besteck besteck = (Besteck) gabel;
		Messer messer = (Messer) besteck;
	}
}

class Besteck { }
class Gabel extends Besteck {}
class Messer extends Besteck {}

Beschreiben sie genau worin der Fehler besteht
In obigem Programm wird zunächst ein Objekt gabel der Klasse Gabel erzeugt. Danach wird eine Typkonvertierung von gabel auf die Oberklasse Besteck durchgeführt und einer Objektreferenz besteck der Klasse Besteck zugewiesen. Der Fehler tritt dann in der nächsten Anweisung auf bei der versucht wird der Objektreferenz besteck, die auf ein Objekt der Klasse Gabel zeigt in eine Objektreferenz der Klasse Messer zu casten.

Warum tritt der Fehler zur Laufzeit und nicht zur Kompilierzeit auf?
Hinter besteck kann sich sowohl eine Gabel als auch ein Messer befinden. Welcher der beiden Typen das ist steht zur Kompilierzeit noch nicht fest da Java late binding benutzt. Die 3. Anweisung ist also richtig solange sich hinter besteck ein Objekt der Klasse Messer befindet. In obigem Programm ist das nicht der Fall und die VM gibt während der Laufzeit eine ClassCastException aus.

Wieso lässt Java solche Fehler überhaupt zu?
Java erlaubt solche Fehler da es dank late binding zB möglich ist Objekte verschiedener Unterklassen in deren Oberklasse zu "verstecken" und je nach Typ der Unterklasse die entsprechenden Methoden aufzurufen (Polymorphismus via late binding).

Was kann Java machmal erst zur Laufzeit wissen?
Java weiss erst zur Laufzeit welche Unterklasse sich hinter einem Objekt befindet.

Wieso kann es das erst zur Laufzeit wissen?
Die Bindung an das Objekt erfolgt erst zur Laufzeit (late binding).


So und jetz viel Spass beim flamen. 😉
 
Soweit ich das beurteilen kann: Nix Bullshit :applaus: Die erste Antwort (und die darin getroffene Unterscheidung zwischen Objekten und Objektreferenzen) ist sogar ungewöhnlich präzise :toll:
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben