verständnis |
19.12.2014, 19:56 | Auf diesen Beitrag antworten » | |||||
neuling96 | verständnis
zunächst die frage was genau machen Object o = (Object) s; Mensch m = (Mensch) s; ? |
|||||
|
||||||
19.12.2014, 19:59 | Auf diesen Beitrag antworten » | |||||
eulerscheZahl | Der Student ist ja ein Mensch (erbt von ihm), also kann man seinen Typ auch zum Mensch umwandeln (casten). Wenn es sich aber um einen Menschen handelt und nicht um einen Studenten, wirkt sich das auch auf toString aus. Für Object gilt das selbe (alle Klassen erben von Object). |
|||||
19.12.2014, 20:12 | Auf diesen Beitrag antworten » | |||||
neuling96 | sry ich steh immer noch aufm schlauch Object o = (Object) s; Object o= (Object) s bedeutet also object o erbt vom object s ?? |
|||||
19.12.2014, 20:26 | Auf diesen Beitrag antworten » | |||||
eulerscheZahl | Nein. Vergiss erst mal das Objekt und konzentriere dich nur auf Student/Mensch. public class Student extends Mensch beasgt, dass Student von Mensch erbt. Mensch m; heißt: es gibt eine Instanz vom Typ Mensch. Nennen wir sie m. m = (Mensch) s;: wandle s in einen Menschen um. weise das Ergebnis dem Menschen m zu. mit dem Objekt ist es dasselbe, nur dass extends Object nicht extra dazugeschrieben werden muss. |
|||||
Anzeige | ||||||
|
||||||
19.12.2014, 22:11 | Auf diesen Beitrag antworten » | |||||
neuling96 | Student s =new Student(20, 12345); publicStudent(intalter,intmatrikelnummer){ super(alter); this.matrnr =matrikelnummer; } erstellt? sodass mit s.toString auf public String toString(){ return "Student(" + matrikelnummer + ")";} } schließlich liefert Student(1234) m = (Mensch) s; m.toString muss auch Student(1234) liefern da bei Objekttypen stehen auf den Variablenzetteln nicht die tatsächlichen Objekte , sondern die entsprechenden Referenzen darauf also wird durch m = (Mensch) s; auf die Referenz vom Student(20,1234) verwiesen |
|||||
20.12.2014, 07:55 | Auf diesen Beitrag antworten » | |||||
eulerscheZahl | Ist das eine Frage? Naja, wie auch immer, du hast recht |
|||||
20.12.2014, 16:52 | Auf diesen Beitrag antworten » | |||||
Karlito | Der Cast ist unnötig, da jeder Student bereits ein Mensch ist. Man muss nur casten, wenn die Zuweisung nicht eindeutig ist. Beispielsweise ist jeder Student ein Mensch, aber nicht jeder Mensch ein Student. Hat man jedoch eine Variable vom Typ Mensch, bei der man weiß, dass es ein Student ist, so kann man die Referenz nur einer Variablen vom Typ Student zuweisen, wenn man vorher castet. Beispiel:
Gruß, Karlito |
|||||
28.12.2014, 21:46 | Auf diesen Beitrag antworten » | |||||
neuling96 |
was wäre wenn man eine main zeile hinzufügen würde, was passiert jetzt? |
|||||
29.12.2014, 07:57 | Auf diesen Beitrag antworten » | |||||
eulerscheZahl | Der Code steht an dieser Stelle bzw. wird von der main aufgerufen. Er kann ja nicht einfach außerhalb einer Klasse sein. |
|||||
29.12.2014, 08:50 | Auf diesen Beitrag antworten » | |||||
neuling96 | public static void main(String[] args) { Student s = new Student(20, 12345); Object o = (Object) s; Mensch m = (Mensch) s; // 1) System.out.println(m.toString()); der main ist m als mensch bekannt muss es dann nicht public String toString(){ return"Mensch(" + alter + ")";} } ausgeführt werden? |
|||||
29.12.2014, 09:38 | Auf diesen Beitrag antworten » | |||||
Karlito | Hallo neuling96, ein Student ist ja ein Mensch. Jedoch ein spezieller Mensch. Deswegen verhält er sich auch anders als "normale Menschen". Du kannst den Studenten nur einer Variable vom Typ Mensch zuweisen, weil er vom Typ Mensch erbt. Es bleibt aber ein Student mit all den geänderten Eigenschaften. Nur dass sich die Sicht auf das Objekt durch die Zuweisung auf eine Variable vom Typ Mensch dann nur noch auf die Eigenschaften und Methoden beschränkt, die Menschen und Studenten gemeinsam haben. D.h. Wenn der Student noch eine Methode "studieren()" hätte, so ist diese Methode nach der Zuweisung auf eine Variable vom Typ Mensch nicht mehr zugreifbar. War das verständlich? Gruß, Karlito |
|||||
29.01.2015, 00:17 | Auf diesen Beitrag antworten » | |||||
neuling96 | "Typumwandlungen von Referenz-Datentypen unterscheiden sich von Umwandlungen der primitiven Datentypen darin, dass nicht die Objekte selbst verändert werden, sondern nur der Datentyp der entsprechenden Referenzen. Es wurd somit nur die Zugriffsart auf die Objekte geändert" Was bedeutet Datentyp der entsprechenden Referenzen wird verändert? Student s = new Student(20, 12345); Mensch m = (Mensch) s; Student s = new Student(20, 12345); damit haben ein Objekt von TYP Student erzeugt und s zeigt auf die Referenz ?? Die Referenz ist die Speicheradresse Mensch m = (Mensch) s; Was passiert mit der Referenz von s?? Muss man das so verstehen Die Main kennt m als Objekt von, aber die Referenz von s zeigt immer noch auf ein Objekt von Student?? |
|||||
29.01.2015, 10:08 | Auf diesen Beitrag antworten » | |||||
Karlito |
s ist die Referenz. Ein Objekt liegt irgendwo im Speicher. In den Variablen wird die Referenz auf dieses Objekt gespeichert.
m ist nach dem Cast eine Referenz auf das selbe Objekt, nur hat sich der Typ der Referenz geändert. Damit wird das Objekt einfach nur anders behandelt, nämlich jetzt als Mensch und nicht mehr als Student. Der Cast ist übrigens unnötig, da jeder Student bereits ein Mensch ist. Edit: Eine Referenz ist eigentlich nur eine Adresse im Speicher. Der Typ der Referenz entscheided darüber wie mit der Adresse im Speicher umgegangen wird, bzw. wie der Speicher ab dieser Stelle interpretiert wird. Für die Hardware sind alles nur Bytes. Der CPU ist auch egal was Du mit dieser Menge von Bytes machst. Das Typsystem von Java sichert erst, dass du diese Menge von Bytes nicht einfach mit einer Zahl multiplizierst, die CPU würde diesen Unsinn einfach Stur machen. In C und C++ ist soetwas auch relativ einfach möglich, wodurch C und C++ so "gefährlich" sind. Man hat damit zwar maximale Kontrolle über das, was alles intern passiert aber mit großer Macht kommt große Verantwortung Gruß, Karlito |
|||||
29.01.2015, 13:57 | Auf diesen Beitrag antworten » | |||||
neuling96 | Sry, ich habe immer noch Schwierigkeiten beim casten zu Verstehen, wie das mit den Referenzen abläuft wir haben im bsp 2 tostring() Methoden wenn Mensch m = new Mensch(25) ; System.out.println(m.toString());// liefert Mensch(25), das ist soweit klar Mensch n=new Student(20, 12345); System.out.println(n.toString());// liefert Student(12345), da Methoden dynamisch gebunden werden, es wird erst zur Laufzeit entschieden, von Klasse das Objekt ist, also wird die tostring() Methode von Student ausgeführt. Tritt beim casting der gleiche Effekt ein? also hier Student s = new Student(20, 12345); Mensch m = (Mensch) s; System.out.println(m.toString()); "Eine Referenz ist eigentlich nur eine Adresse im Speicher. Der Typ der Referenz entscheided darüber wie mit der Adresse im Speicher umgegangen wird, bzw. wie der Speicher ab dieser Stelle interpretiert wird." Betrachten wir wieder Student s = new Student(20, 12345); Mensch m = (Mensch) s; Zu Complierzeit, zeigt die Referenz auf ein Objekt von der Klasse Mensch aber zur Laufzeit, zeigt die Referenz auf ein Objekt von der Klasse Student?? |
|||||
29.01.2015, 14:30 | Auf diesen Beitrag antworten » | |||||
Karlito | Hallo neuling96,
Es wird ein Objekt vom Typ Student angelegt und eine Referenz auf dieses Objekt der Variablen s Zugeordnet. "Student s" besagt, dass s eine Referenz auf ein Objekt vom Typ Student ist. "Mensch m = (Mensch) s;" ändert nur den Typen der Referenz. D.h. es wird weiterhin ein Objekt vom Typ Student referenziert. Daher verhält es sich auch wie ein Student. Es ändert sich nur die Sichtweise auf dieses Objekt. D.h. man kann mit der Variable nur noch so arbeiten wie mit einem Menschen und hat alles, was in der Klasse Student definiert nicht mehr zur Verfügung. Trotzdem verhält sich das Objekt immernoch wie ein Student, da das referenzierte Objekt ja ein Student bleibt. Gruß, Karlito |
|||||
29.01.2015, 23:44 | Auf diesen Beitrag antworten » | |||||
neuling96 | vielen Dank das klingt einleutend Falls sich weitere Fragen ergeben, werde ich nachfragen |
|||||
29.01.2015, 23:48 | Auf diesen Beitrag antworten » | |||||
Karlito | Gerne! |
|
Verwandte Themen
Die Beliebtesten » |
Die Größten » |
Die Neuesten » |
|