Was bedeutet diese Schreibweise?

Dnh

Mitglied
Hallo,

Java:
Fahrzeug f;
Auto a;
Fahrrad rad;
a = new Auto();
f = a;
a = (Auto) f;
rad = (Fahrrad) a;
rad = (Fahrrad) f;

Die Aufgabe besteht darin zu erkennen, was zu Laufzeitfehlern und was zu Compilerfehlern führt. Ich muss allerdings erstmal verstehen was genau diese Klammerschreibweise bedeutet bzw. macht.
Was ich glaube zu verstehen: Fahrzeug, Auto und Fahrrad sind eigene Klassen.
Es werden Variablen f,a und rad deklariert aber noch nicht initialisiert.
a wird dann initialisiert, bzw. ein neues Autoobjekt wird erzeugt und a genannt.
Dann soll f = a sein. f ist aber ein Fahzeug, kann also kein Auto sein(?)
Kann man das so sagen, oder kommt es auf die Vererbunghirarchie an?
Ja und dann kommt das mit den Klammern, da weiß ich leider nicht was das bedeutet.
Vielleicht kann da ja jemand Licht ins Dunkle bringen.
 

Robat

Top Contributor
Ob in deinem Beispiel f = a gesetzt werden kann, hängt von der Vererbunghirarchie ab. (Ich geh aber mal davon aus, dass Auto von Fahrzeug erbt?)
"das mit den Klammern" nennt sich Casting bzw Typumwandlung. Siehe hier.
 

mihe7

Top Contributor
Jetzt, nachdem Du weißt, was die Klammern bedeuten, kannst Du doch erst mal einen Tipp abgeben.

Edit: Noch eine Frage. Mehr steht bzgl. Fahrzeug, Auto, Fahrrad bei der Aufgabe nicht dabei?
 

Dnh

Mitglied
Naja, ich habe zwar verstanden, dass die Klammer den Zieltyp darstellt, in den umgewandelt werden soll.
Wann genau das erlaubt ist und wann nicht allerdings noch nicht so ganz.

Beispiel: a soll zu f werden, wobei f vorher zu einem Auto gecasted wird. Der Compiler wird also gezwungen aus einem Fahrzeugtyp ein Autotyp zu machen, auch wenn Daten verloren gehen. Trotzdem gibt es Einschränkungen wann das geht und wann nicht(Die ich nicht wirklich kenne) Darf f zu einem Auto gemacht werden?
Wenn ja, dann ist die Zeile zulässig. Wenn nein, weiß ich trotzdem nicht, ob der Compiler das vorher schon weiß oder erst während der Laufzeit herausfindet. Blick da noch nicht so richtig durch..
 

mihe7

Top Contributor
Zuerst mal muss Dir klar sein, dass die Variablen keine Objekte sondern nur Referenzen darauf aufnehmen:

Java:
Auto a;
Auto b;
a = new Auto();
b = a;

Hier gibt es nicht etwa zwei Auto-Objekte, sondern ein Auto-Objekt und zwei Variablen, die auf das selbe (nicht das gleiche!) Auto-Objekt verweisen. Der new-Operator erzeugt das Objekt und gibt eine Referenz darauf zurück, die zunächst der Variablen a zugewiesen wird. Danach wird der Wert der Variablen a (der Wert ist die Referenz auf das Objekt) der Variablen b zugewiesen.

Mit der Typumwandlung wird versucht, den Compiler zu zwingen, eine gegebene Referenz als Referenz auf ein Objekt eines bestimmten Typs zu behandeln. Wie oben geht es nur um die Referenzen - es wird kein neues Objekt erzeugt und es gehen schon gar keine Daten verloren.

Der Compiler wird also gezwungen aus einem Fahrzeugtyp ein Autotyp zu machen, auch wenn Daten verloren gehen.
Wenn wir mal davon ausgehen, dass die Vererbungshierarchie berücksichtigt, dass jedes Auto auch ein Fahrzeug ist, warum sollten dann Daten verloren gehen?
 

Dnh

Mitglied
Ahh, jetzt ist mir das ganze schon um einiges klarer.
Code:
f = a;
-> f hat jetzt die gleiche Referenz auf das Auto Objekt. Müsste so klappen, da ein Auto auch ein Fahrzeug ist, eine Variable des Typs Fahrzeug darf also auf ein Auto referenzieren.
Code:
a = (Auto) f;
-> f soll jetzt auf den Typ Auto referenzieren auch wenn es eigentlich vom Typ Fahrzeug ist.
Und zwar soll f auf das gleiche Objekt referenzieren wie a, welches ein Auto ist. Sollte also auch zulässig sein.
Code:
rad = (Fahrrad) a;
-> a soll jetzt auf den Typ Fahrrad referenzieren. Ich glaube hier kommt es zu einem Compilerfehler, da dieser ja schon weiß, dass a schon auf ein Auto Objekt referenziert, richtig?
-> f soll jetzt auf den Typ Fahrrad referenzieren. Ich glaube, da f vorher schon dazu gebracht wurde auf den Typ Auto zu referenzieren, ist es hier nicht mehr möglich, dass f jetzt auf den Typ Fahrrad referenziert. Hier also eventuell der Laufzeitfehler, da der Compiler das nicht hat kommen sehen?
 

mihe7

Top Contributor
eine Variable des Typs Fahrzeug darf also auf ein Auto referenzieren
... sofern die Klasse Auto die Klasse Fahrzeug erweitert. Vollkommen richtig!

Und zwar soll f auf das gleiche Objekt referenzieren wie a, welches ein Auto ist.

Ich würde es umgekehrt formulieren: a soll das selbe(!) Objekt referenzieren wie f. Du weist ja "a" einen Wert zu (das Zeichen "=" ist eine Zuweisung, kein Vergleich), d. h. nachdem diese Anweisung ausgeführt wurde, sollen a und f das selbe Objekt referenzieren.

Sollte also auch zulässig sein.
Zur Übersetzungszeit ja.

a soll jetzt auf den Typ Fahrrad referenzieren
Ich denke, Du meinst das richtige. Variable a referenziert ein Objekt und an der Stelle soll die Referenz so behandelt werden, als würde sie ein Objekt vom Typ Fahrrad referenzieren.

Wie Du richtig erkannt hast, kommt es hier zu einem Compilerfehler, sofern die Klasse Fahrrad die Klasse Auto (oder umgekehrt) nicht erweitert. Deine Begründung ist daher nicht ganz korrekt: Objekt existieren erst zur Laufzeit. Vermutlich auch einfach nur eine Sache der Begrifflichkeiten.

f soll jetzt auf den Typ Fahrrad referenzieren. Ich glaube, da f vorher schon dazu gebracht wurde auf den Typ Auto zu referenzieren, ist es hier nicht mehr möglich, dass f jetzt auf den Typ Fahrrad referenziert. Hier also eventuell der Laufzeitfehler, da der Compiler das nicht hat kommen sehen?

Ja, das Prinzip stimmt, nur die Formulierung ist gewöhnungsbedürftig :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Was bedeutet diese Zeile? Java Basics - Anfänger-Themen 2
R Was bedeutet diese Zeile. Java Basics - Anfänger-Themen 8
G Was bedeutet diese Fehlermeldung von Tomcat Java Basics - Anfänger-Themen 29
onlyxlia Was bedeutet das @Override? Java Basics - Anfänger-Themen 1
W Streams in Java und was bedeutet meine Konsolen-Ausgabe? Java Basics - Anfänger-Themen 4
N Was bedeutet dieser Fehler Java Basics - Anfänger-Themen 2
S Was bedeutet ungleich (in diesem Zusammenhang)? Java Basics - Anfänger-Themen 2
S Was bedeutet das Zeichen := Java Basics - Anfänger-Themen 9
H Was bedeutet das: [I@7d4991ad? Java Basics - Anfänger-Themen 20
P Was bedeutet dieser Fehler? Java Basics - Anfänger-Themen 31
MiMa Was bedeutet unchecked or unsafe operations? Java Basics - Anfänger-Themen 6
ZH1896ZH OOP Verstehe nicht was der Hinweis bedeutet, bitte um Hilfe! Java Basics - Anfänger-Themen 2
O Was bedeutet das hier 999_983? Java Basics - Anfänger-Themen 2
W Was bedeutet im Struktogramm „zufall“ aufrufen (keine Parameterübergabe)? Java Basics - Anfänger-Themen 8
S Erste Schritte Was bedeutet dieser Code? Java Basics - Anfänger-Themen 2
D Erste Schritte Was bedeutet dieser Code? Java Basics - Anfänger-Themen 23
R Was bedeutet -1 Java Basics - Anfänger-Themen 2
V OOP Was bedeutet das "aBruch" Java Basics - Anfänger-Themen 6
U Was bedeutet $@ in der Linux Kommandozeile Java Basics - Anfänger-Themen 3
dave253 Was bedeutet (String args[])? Java Basics - Anfänger-Themen 6
D was bedeutet this. bei Konstruktoren? Java Basics - Anfänger-Themen 4
N Was bedeutet "Implementierung vor dem Client verbergen" bei Design Patterns? Java Basics - Anfänger-Themen 2
G Methoden Was bedeutet return in einer Methode Java Basics - Anfänger-Themen 5
V Was bedeutet das? Java Basics - Anfänger-Themen 4
G zeile: Was bedeutet das in der Methode? Java Basics - Anfänger-Themen 4
Y Was bedeutet "this" ohne dem Punkt und dem Atrributnamen danach? Java Basics - Anfänger-Themen 2
M was bedeutet setEnabled Java Basics - Anfänger-Themen 12
F Was bedeutet '@'? Java Basics - Anfänger-Themen 3
F Frage von einem Neuling: Was bedeutet Scanner scanner ? Java Basics - Anfänger-Themen 5
K Schlüsselworte Was bedeutet oder was ist die SIGNATUR?? Java Basics - Anfänger-Themen 4
O Was bedeutet public class value? Java Basics - Anfänger-Themen 3
A Was bedeutet der Operator *= ? Java Basics - Anfänger-Themen 2
N Was bedeutet << Java Basics - Anfänger-Themen 5
J Was bedeutet This. ? Java Basics - Anfänger-Themen 4
S Was bedeutet dieser ausdruck? Java Basics - Anfänger-Themen 9
D Was genau bedeutet und bewirkt dieses @override? Java Basics - Anfänger-Themen 15
J Was bedeutet dieses a [i].length? Java Basics - Anfänger-Themen 3
D Was bedeutet < > Java Basics - Anfänger-Themen 4
D Was bedeutet das ?: Java Basics - Anfänger-Themen 9
B Was bedeutet static<T>?? Java Basics - Anfänger-Themen 6
0 Was bedeutet dieser Generic-code? Java Basics - Anfänger-Themen 3
php1 Was bedeutet der Modifier static ? Java Basics - Anfänger-Themen 3
K Was bedeutet das eigentlich.... Java Basics - Anfänger-Themen 18
G Was bedeutet? Java Basics - Anfänger-Themen 7
G Was bedeutet charAt()? Java Basics - Anfänger-Themen 5
J Was bedeutet der Doppelpunkt ":" ? Java Basics - Anfänger-Themen 3
G was bedeutet //TODO Java Basics - Anfänger-Themen 4
A Was bedeutet folgende Programmcodezeile genau Java Basics - Anfänger-Themen 6
B was bedeutet "this" Java Basics - Anfänger-Themen 8
L Was bedeutet das Wort "this" ? Java Basics - Anfänger-Themen 2
K was bedeutet '?' Java Basics - Anfänger-Themen 3
S was bedeutet Typisiert? Java Basics - Anfänger-Themen 3
D Was bedeutet : ? Java Basics - Anfänger-Themen 4
M public static void main(String... args)<- Was bedeutet das? Java Basics - Anfänger-Themen 5
H Was bedeutet "class Liste<E>" Java Basics - Anfänger-Themen 2
J was bedeutet null Java Basics - Anfänger-Themen 7
padde479 Compiler-Frage: Was bedeutet deprecated? Java Basics - Anfänger-Themen 4
P Was genau bedeutet Feld Java Basics - Anfänger-Themen 3
G indexOf() - was bedeutet -1 ? Java Basics - Anfänger-Themen 27
P Was genau bedeutet "public static void main(String[] ar Java Basics - Anfänger-Themen 10
G setName bei JTextfield. Was bedeutet das? Java Basics - Anfänger-Themen 7
B Was bedeutet synchronized? Java Basics - Anfänger-Themen 8
D was bedeutet " Seiteneffekt " ? Java Basics - Anfänger-Themen 4
P Wie kann diese Schleife beenden Java Basics - Anfänger-Themen 1
N Was Passiert mit dem Namen einer Variable, wenn man diese einer Liste Hinzufügt Java Basics - Anfänger-Themen 16
M Wie kommen diese Ausgaben zustande? Java Basics - Anfänger-Themen 12
W Warum diese Fehlermeldung? Java Basics - Anfänger-Themen 12
berserkerdq2 Habe eine Klasse, welche public ist, diese hat eine public Methode, die nicht static ist. Wenn ich nun versuche aufzurufen Probleme? Java Basics - Anfänger-Themen 8
Alen123 Wie würdet ihr diese Aufgabenstellung lösen? Java Basics - Anfänger-Themen 18
J Hallo zusammen , was macht diese Methode hier genau? Java Basics - Anfänger-Themen 3
Fats Waller Wofür stehen diese Konstanten im Java Labyrinth ? Java Basics - Anfänger-Themen 5
M Könnte mir jemand diese Aufgabe erklären? Java Basics - Anfänger-Themen 2
M Könnte mir jemand diese Aufgabe erklären? Java Basics - Anfänger-Themen 9
dieter000 Wie schreibe ich diese ZEile um? Java Basics - Anfänger-Themen 1
M Objekt mit eindeutiger ID löschen, das nächste Objekt hat dann diese ID Java Basics - Anfänger-Themen 5
J Womit kann ich diese Methode testen? Java Basics - Anfänger-Themen 5
J Hat jemand einen Lösungsansatz für diese Aufgabe? Java Basics - Anfänger-Themen 1
ZH1896ZH Wieso diese Ausgabe?? Java Basics - Anfänger-Themen 10
T Was macht diese Zeile? Java Basics - Anfänger-Themen 9
G Woher kommt diese Eigenschaft Java Basics - Anfänger-Themen 5
O Was tut diese Methode? und wie müssen die assertions aussehen? Java Basics - Anfänger-Themen 21
F Wie implementiere ich diese Aufgabenstellung? Java Basics - Anfänger-Themen 16
F Wie kann ich diese NullPointerException umgehen?! Java Basics - Anfänger-Themen 41
F Warum erhalte ich diese Fehler bei der Einbindung von SQLite JDBC in Eclipse? Java Basics - Anfänger-Themen 1
F Warum verläuft DIESE Schleife endlos? Java Basics - Anfänger-Themen 4
A Erste Schritte Bitte helfen sie mir diese Programm zu schreiben Java Basics - Anfänger-Themen 12
W Wie vermerke ich diese Struktogramm Passage in Java Syntax? Java Basics - Anfänger-Themen 8
N Methoden warum wird diese Methode aufgerufen Java Basics - Anfänger-Themen 9
L Input/Output Wieso kommt diese Ausgabe? Java Basics - Anfänger-Themen 12
L Datentypen Date API - diese Woche bestimmen Java Basics - Anfänger-Themen 1
M Aus Datei auslesen und untersuchen ob diese Zeile schon vorhanden ist Java Basics - Anfänger-Themen 3
B Kann mir jemand diese Bedingung erklären Java Basics - Anfänger-Themen 5
B Wie könnte man mit Java diese Matheaufgabe lösen Java Basics - Anfänger-Themen 7
B Wie würdet ihr diese Methode erklären? Java Basics - Anfänger-Themen 2
C Methoden Welche JSoup Methoden Und Parameter für diese HTML Tags Java Basics - Anfänger-Themen 4
kilopack15 Ist diese setter-Methode richtig? Java Basics - Anfänger-Themen 2
B Wie funktionieren diese Methoden in diesem Sortierverfahren genau? Java Basics - Anfänger-Themen 2
B Was macht diese Methode? Java Basics - Anfänger-Themen 9
P Was macht diese methode Java Basics - Anfänger-Themen 2
P Terminieren diese Schleifen Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben