Lena: Oberklassengewalt

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

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

    1. :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

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

        1. ah, hatte ich mich noch nicht beschäftigt. ein interessanter ansatz

          danke schön

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

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

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