Michilee: Extend, Implement, Abstract

Beitrag lesen

Hi,

den wert der static variablen kann ich auch nicht ändern? final ja sowieso nicht.

Doch, kannst du. Natürlich nur, wenn die Variable in deinem Kontext gerade sichtbar ist.

Wie du in deinem P.S geschrieben hast, probiere ich die Tage dann ein paar Testscripte zu schreiben und alles zu verstehen und dann erst wieder mit Fragen zu kommen. Jetzt versuche ich es mit Abschlussfragen, so dass sich dieser Thread nicht in die Länger zieht :-)

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)

Seriazible b = new MeineKlasse();

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

b hat dann mindestens die Typen Serializable, MeineKlasse und Object. Und alle weiteren, die sich in der Vererbungshierarchie noch zwischen Object und MeineKlasse befinden.

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.

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

Seriazible b = meineKlasse() nicht gehen.

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

Auto a= new Auto()
Auto a = new VW()

Auto und VW sind Klassen, a ist ein Objekt.

Okey, da kann ich meine Problematik besser schildern, wenn ich auf die Begriffe achte.

Also das Objekt a wäre von Datentyp Auto, da meine Klasse VW von Auto abgeleitet ist.

Es ist auch wichtig, dass der Code oben in ein und derselben Quelldatei nicht kompilierbar ist. In der ersten Zeile wird der Typ bereits auf Auto festgelegt. Du kannst das von a referenzierte Objekt zwar noch ändern, musst dann aber das "Auto" davor weglassen.

ah, ok, hab zweimal das Objekt a benannt. Sollte entweder oder sein, dass praktisch beides möglich ist.

Auto d= new Auto()
Auto e = new VW()

Ansonsten gilt, unter der Bedingung das VW von Auto erbt: In Zeile eins ist a vom Typ Auto, in Zeile zwei ist a vom Typ Auto und vom Typ VW. (Und beide Male trivialerweise auch vom Typ Object)

oki doki, das letztere ist beides.

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".

Moment, implements erzeugt dir kein Objekt, sondern zeigt an, dass eine _Klasse_ sämtliche Methoden einer Schnittstelle ebenfalls hat (sonst würde sie nicht durch den Compiler kommen). Von dieser _Klasse_ kannst du dann Objekte erzeugen, die automatisch auch den Typ Serializable haben.

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

Seriazible a = new meineKlasse();

Das Objekt was ich bilde ist ja meineKlasse und Serizible (die Klasse) der Typ und meineKlasse.
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()

P.S.: Programmieren lernt man nur durch Programmieren.

ja ich merke, da muss ich mich schnell ranmachen. danke nochmals.