Oberklassengewalt
Lena
- java
Hallo zusammen :)
Die Unterklasse U soll gezwungen werden, einen Methode m in jedem Fall aufzurufen, m ist in der Oberklasse O abstrakt definiert.
Wie kann ich sie dazu zwingen?
Ich habe mir überlegt, der Konstruktor der Klasse O wäre doch recht hübsch dafür geeignet... jetzt würde ich aber - gerne auch mit Gewalt - die Unterklasse U daran hindern, den O-Konstruktor zu überschreiben? (sonst könnte sie sich ja doch einfach wieder um die Methode m drücken, und das wollen wir ja nicht :D
Aber wie?
Gruß
Lena
Die Unterklasse U soll gezwungen werden, einen Methode m in jedem Fall aufzurufen, m ist in der Oberklasse O abstrakt definiert.
Wie kann ich sie dazu zwingen?
Was ist dein eigentliches Problem?
Mit dem Zwang ist das so eine Sache. Klassen benutzen sich ja nicht von alleine, sondern werden von Programmierern benutzt.
Wer eine Klasse falsch anwenden will, wird das tun. Wenn in der Klasse irgendwas steht, was ihm nicht gefällt, wird er den Quelltext ändern, damit das nicht passiert.
Mit anderen Worten: Du hast eher ein soziales Problem, kein technisches.
:D
ich bastel ganz alleine an dem projekt, und habe noch keine schizophrene ader an mir entdeckt :D
aber ich mag es eben gerne hübsch sauber. und wollte eben mögliche fehlimplementierungen vermeiden. nach dem motto : der compiler sagt dir was zu tun ist, nicht die doku.
so in der art
aber ich mag es eben gerne hübsch sauber. und wollte eben mögliche fehlimplementierungen vermeiden. nach dem motto : der compiler sagt dir was zu tun ist, nicht die doku.
Wenn der Compiler wüßte, was zu tun ist, würde er das Programm selbst schreiben, nicht du.
Wenn du jemanden brauchst, der meckert, weil Dinge nicht so gemacht werden, wie vorgesehen, dann nutze jUnit und schreibe dir entsprechende Unit-Tests. Das hilft auch ganz kräftig bei der Designphase.
ah, hatte ich mich noch nicht beschäftigt. ein interessanter ansatz
danke schön
Hallo,
Die Unterklasse U soll gezwungen werden, einen Methode m in jedem Fall aufzurufen, m ist in der Oberklasse O abstrakt definiert.
ich glaube, dass ich dein Problem nicht verstanden habe. Wenn eine Methode abstrakt definiert wurde, so kann es doch nur die Methode in der Unterklasse geben.
Markus
Hallo,
ich glaube, dass ich dein Problem nicht verstanden habe. Wenn eine Methode abstrakt definiert wurde, so kann es doch nur die Methode in der Unterklasse geben.
Nein. Das geht sehr wohl. Die Unterklasse muß die Methode ja implementieren.
Nur von einer Klasse, die alle abstrakte Methoden implementiert, die
also nicht abstrakt ist, kann ein Objekt erzeugt werden. Sobald also
das Objekt existiert, sind auch alle Methoden definiert und können
aufgerufen werden.
Ergo kann auch der Konstruktor (oder jede andere Methode) in der
abstrakten Klasse eine abstrakte Methode derselben Klasse aufrufen.
Gruß
Slyh
Hallo,
Ich habe mir überlegt, der Konstruktor der Klasse O wäre doch recht hübsch dafür geeignet... jetzt würde ich aber - gerne auch mit Gewalt - die Unterklasse U daran hindern, den O-Konstruktor zu überschreiben? (sonst könnte sie sich ja doch einfach wieder um die Methode m drücken, und das wollen wir ja nicht :D
Aber wie?
Gar nicht. :-)
Das kommt schon alleine daher, daß nur dann ein Default-Konstruktor
erzeugt wird, wenn die Oberklasse nur einen Konstruktor besitzt, der
keine Parameter entgegen nimmt. Sobald Parameter im Spiel sind, muß
ein Konstruktor explizit erstellt werden. Und das kann man ja kaum
verbieten. :-)
Dein eigentliches Problem läßt sich so ohne weiteres auch nicht lösen.
Du kannst eine neue Methode nicht zwingen, eine Methode der Oberklasse
aufzurufen. Dies gilt auch für einen überschriebenen Konstruktor.
Wahrscheinlich ist hier tatsächlich Dokumentation das Mittel der
Wahl. Möglicherweise hilft auch ein Re-Design. :)
Gruß
Slyh