Richard: Extend, Implement, Abstract

Beitrag lesen

Hallo Michilee,

Also ohne ein Objekt zu bilden kann ich die static Variable ändern. Bis dahin klar. Und das versuche ich die Tage auch. Ich teste dann, (da die Klassen ja für eine Webanwendung ist), was passiert, wenn eine Klasse auf eine static-Variable zugreift und ändert und später eine andere Klasse die static-Variable aufruft, welcher Wert drin ist. (Weil die Kompilierte-Klasse kann man ja nicht ändern)

Nachdem das Programm einmal beendet wurde, existieren die Objekte natürlich nicht mehr. Beim nächsten Programmstart sind die geänderten Werte also nicht mehr da. Alle Angaben bzgl. des Änderns von Variablenwerten bezogen sich auf genau _eine_ Laufzeit des Programms.

Seriazible b = new MeineKlasse();

Dann wäre der Datentyp Seriazible? Habe ich das richtig verstanden?

Unter anderem, ja.

Ah ok, das Datentyp bezieht sich nicht immer auf das was vor dem beim Objektbilden steht (im oberen Fall Seriazible) sondern, das Objekt hat mehrere (Daten?)Typen.

Richtig, das Objekt ist polymorph.

Das Teste ich dann auch, zwischen extens und implements. Wenn ich Seriazible implements nehme, dann dürfte

Seriazible b = meineKlasse() nicht gehen.

Das wird nur gehen, wenn die Methode meineKlasse() eine konkrete Implementierung von Serializable zurückgibt. Wahrscheinlich meintest du aber den Konstruktor. Um den aufzurufen, musst du das Schlüsselwort new verwenden. Wenn die Klasse meineKlasse Serializable implementiert, ist obiges Konstrukt richtig (abgesehen vom fehlenden new natürlich).

Oder ich verwechsle gerade das Objekt bilden, so dass new Seriazible nicht geht.

new Serializable() wird in der Tat nicht funktionieren.

VW f = new VW() wäre jedoch vom Typ her auch beides, also Auto und VW, da er ja geerbt wird oder ignoiert er das? Womöglich geht das nicht. Und natürlich noch vom Typ "Objekt".

Ein Objekt ist immer Typ von:
1. der Klasse, von der es erzeugt wurde,
2. allen Klassen, die in der Vererbungshierarchie über der Klasse stehen, von der das Objekt erzeugt wurde, und
3. allen Schnittstellen, die von irgendeiner Klasse, die in der Vererbungshierarchie über der Klasse steht, von der das Objekt erzeugt wurde, inklusive der Klasse selbst, implementiert wurden.

Oki, mit Objektbilden, habe ich dann etwas falsch verstanden. Hab als Objekt immer das bezeichnet, was vor dem = steht.

Das, was vor dem = steht ist der Variablenname der Variable, die eine Referenz auf das Objekt enthält.

Seriazible a = new meineKlasse();

Das Objekt was ich bilde ist ja meineKlasse und Serizible (die Klasse) der Typ und meineKlasse.

Nein, meineKlasse ist nicht das Objekt, sondern eine Klasse.

Und da ich von Implements kein Objekt bilden kann, geht aber evtl. dies, wenn ich zum Beispiel Seriazible implements gemacht habe.

Seriazible a = new meineKlasse()

also
ImplementiereKlasse b = meineKlasse()

Überlege dir genau, welche Klasse hier welche Schnittstelle implementieren muss und wie die entsprechenden Passagen im Quellcode aussehen müssen.

Grüße
Richard