Richard: Extend, Implement, Abstract

Beitrag lesen

Hallo Michilee,

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.

Wenn ich in meiner Klasse extends Seriazible habe, kann ich ja davon ein Objekt mit meiner Klasse erzeugen.

Wenn du mit extends von Seralizable erbst, hast du wieder eine Schnittstelle. Willst du das Interface stattdessen implementieren, nutzt du dafür das Schlüsselwort implements.

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.

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.

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)

VW a = new VW() machen, obwohl Klasse VW von Klasse Auto (Elternelement?) abgeleitet ist.

Du kannst Objekte von beliebigem Typ erzeugen, unabhängig wovon sie abgeleitet sind.

Siehe oben. Wenn ich das oben mit Seriazible richtig verstanden habe, kann ich von Seriazible nur extends machen, damit ich ein Objekt (also den Datentyp) erzeuge, denn implements Seriazible würde nicht gehen, wenn ich von abtract und Interface kein Objekt bilden darf.

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.

Grüße
Richard

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