Hallo, ich habe eine Frage zu folgendem Code:
if (person instanceof Person.User) {
Person.User user = (Person.User) person;
user.live();
Was genau passiert bei = (Person.User) person; ? Das mit den Klammern verstehe ich nicht ganz. Das gleiche bei:
if(object instanceof Movable) {
Movable movable = (Movable) object;
movable.move();
Zu finden in Aufgabe 3 und 4, printMainInfo und Benutzer, Verlierer, Codierer und Programmierer.
Vielen Dank :)
Christof
Level 16
Frage zu Aufgabe, Lektion 8 Level 4
Under discussion
Comments (2)
- Popular
- New
- Old
You must be signed in to leave a comment
Nouser
13 March 2021, 12:18
Beim deklarieren und initialisieren eines Objekts geschehen eigentlich drei Sachen.
1. Du erstellst eine Referenzvariable, die eine Referenz zu einem Objekt eines bestimmten Typs speichern kann, z.B. Hund hundeVariable;
hundeVariable kann nun quasi eine Adresse speichern, wo die JVM dann ein Hunde Objekt findet.
2. Als Zweites wird ein Hunde Objekt erstellt mit new Hund()
Speicherplatz wird reserviert und das Objekt im Speicher abgelegt. Die Adresse wird ermittelt.
3. hundeVariable = new Hund(); hier wird dann die Adresse zum Hund in hundeVariable gespeichert.
Das ist sehr wichtig zu verstehen. hundeVarible ist kein Hund (auch wenn man das gemeinhin so sagt). hundeVarible beinhaltet eine Referenz zu einem Hund.
Das Hundeobjekt ist immer ein Hund und wird immer ein Hund bleiben. Man kann allerdings die Referenz zu einem Hund auch in einer Referenzvariablen eines anderen Typs speichern, eines allgemeineren Typs. Der allgemeinste ist immer Object, da jedes Objekt von Object abgeleitet ist. Heißt, ein Hund ist immer ein Object. Du könntest also schreiben
Der Nachteil ist, dass ich nur Methoden auf hundAlsObject aufrufen kann, die in der Object Klasse definiert sind. Kann der Hund also bellen, kann das über die hundAlsObject Referenzvarible nicht aufgerufen werden, da die Object Klasse vom Bellen nichts weiß. Um den Hund bellen zu lassen, kann man die Referenzvariable wieder in einen spezielleren Typ zurückverwandeln. Da aber nicht jedes Object auch ein Hund ist, muss man das prüfen oder hoffen. Hier wissen wir das genau, deswegen kann man das einfach so machen...
hundAlsObject wird in den Typ Hund gecastet und jetztWiederHund zugewiesen. Und der Hund kann wieder bellen.
0
Nouser
13 March 2021, 12:21
Wenn man nicht weiß, auf welchen Typ hundAlsObject wirklich verweist, dann kann man das mit dem instanceOf Operator auch prüfen und macht dann beim Casten keinen Fehler und löst somit auch keine Exceptions aus.
0