Hallo,
ein weiterer Punkt an dem ich grad hänge:
Nehmen wir an, man möchte eine abstrakte Basisklasse entwickeln, die bereits Attribute hat.
Es ist soweit logisch: abstrakte Klassen haben keine Konstruktoren.
Wie also die Attribute in abgeleiteten Klassen initialisieren? Ich sehe da zwei Möglichkeiten:
1. In der abstrakten Basisklasse setter-Methoden für die entsprechenden (privaten) Attribute implementieren, die dann von den Konstruktoren der abgeleiteten Klasse aufgerufen werden.
2. Die Attribute als "protected" modifizieren und in den Konstruktoren abgeleiteten Klassen direkt initialisieren.
soweit korrekt?
Wenn man nun aber möchte, daß einige der Attribute final sind (zb name und geschlecht), also nur ein einziges mal initialisiert werden dürfen und danach nicht mehr geändert, dann geht Möglichkeit 1 schon mal nicht. ("cannot assign a value to final variable name" meckert der Compiler in der Implementierung der setter-Funktion von finalen Attributen).
Letztlich gefällt mir aber die erste Methode besser, da man ja in der abstrakten Basisklasse eine Methode wie "initialisiere(typ1 attribut1, typ2 attribut2 ...)" implementieren kann, die dann in den abgeleiteten Klassen ebenso komfortabel aufgerufen werden kann wie der Konstruktor einer Basisklasse. Und sollte sich bei er Initialisierung der Basisklassenattribute etwas ändern, nur an einer Stelle geändert werden muß. Bei Möglichkeit 2 müßte man in jeder abgeleiteten Klasse den Konstruktor vollständig implementieren, und bei jeder Änderung in JEDER abgeleiteten Klasse ändern = Arbeitsintensiv und fehleranfällig.
Fallen euch elegantere Methoden ein, um abstrakte Basisklassen mit finalen Attributen zu verwenden?
Ich verbleibe in der Hoffnung, mich einigermaße verständlich ausgedrückt und nicht allzu dumm gefragt zu haben
grüße nosek
ein weiterer Punkt an dem ich grad hänge:
Nehmen wir an, man möchte eine abstrakte Basisklasse entwickeln, die bereits Attribute hat.
Es ist soweit logisch: abstrakte Klassen haben keine Konstruktoren.
Wie also die Attribute in abgeleiteten Klassen initialisieren? Ich sehe da zwei Möglichkeiten:
1. In der abstrakten Basisklasse setter-Methoden für die entsprechenden (privaten) Attribute implementieren, die dann von den Konstruktoren der abgeleiteten Klasse aufgerufen werden.
2. Die Attribute als "protected" modifizieren und in den Konstruktoren abgeleiteten Klassen direkt initialisieren.
soweit korrekt?
Wenn man nun aber möchte, daß einige der Attribute final sind (zb name und geschlecht), also nur ein einziges mal initialisiert werden dürfen und danach nicht mehr geändert, dann geht Möglichkeit 1 schon mal nicht. ("cannot assign a value to final variable name" meckert der Compiler in der Implementierung der setter-Funktion von finalen Attributen).
Letztlich gefällt mir aber die erste Methode besser, da man ja in der abstrakten Basisklasse eine Methode wie "initialisiere(typ1 attribut1, typ2 attribut2 ...)" implementieren kann, die dann in den abgeleiteten Klassen ebenso komfortabel aufgerufen werden kann wie der Konstruktor einer Basisklasse. Und sollte sich bei er Initialisierung der Basisklassenattribute etwas ändern, nur an einer Stelle geändert werden muß. Bei Möglichkeit 2 müßte man in jeder abgeleiteten Klasse den Konstruktor vollständig implementieren, und bei jeder Änderung in JEDER abgeleiteten Klasse ändern = Arbeitsintensiv und fehleranfällig.
Fallen euch elegantere Methoden ein, um abstrakte Basisklassen mit finalen Attributen zu verwenden?
Ich verbleibe in der Hoffnung, mich einigermaße verständlich ausgedrückt und nicht allzu dumm gefragt zu haben
grüße nosek