Ich habe eine Frage zu einem hinterhältigen Weg, um Zugang zu Paketzugangsmitgliedern zu erhalten, die mir einfielen. Insbesondere möchte ich eine Klasse erweitern - nennen wir sie com.acme.Foo
-, um einige Funktionen hinzuzufügen. Dies ist eine reine Addition: Alle aktuellen Methoden von Foo
würden nur durch Delegieren an die Superklassenmethode unterstützt. Es gibt jedoch keinen barrierefreien Konstruktor von Foo
, daher kann ich die Klasse nicht erweitern und meine Implementierung wird den "isA" -Test nicht als Foo
bestehen. Es gibt keine Schnittstelle, die Foo
-ness ausdrückt, die ich anstelle der Vererbung verwenden kann. DieseZugang zu Paketzugriffsmembern erhalten, indem der gleiche Paketname erstellt wird
ist, wo der hinterhältigen Gedanke kam mir der Gedanke: Foo
ein Paket-Zugang Konstruktor hat, warum also nicht nur ein Paket com.acme
in meinem Quellordner erstellen und erstellen Sie eine InheritableFoo
Klasse in diesem Paket:
package com.acme;
public class InheritableFoo extends Foo {
public InheritableFoo() {
super();
}
}
Jetzt kann ich meine Erweiterung zu Foo
durch Erweitern InheritableFoo
implementieren, da dies einen barrierefreien Konstruktor hat.
Das fühlt sich alles falsch an, und irgendwie unethisch: Ich respektiere nicht die Entscheidung, die der ursprüngliche Programmierer traf, als er oder sie sich entschied, keinen Konstruktor für Foo
freizugeben. Aber es könnte sein, dass sie einfach den Ansatz "alles leugnen, bis es einen Grund dafür gibt" angenommen haben. Wie auch immer, gibt es irgendetwas grundsätzlich falsch mit dieser Idee? Werde ich mir in der Zukunft Probleme machen, wenn ich diesen Weg gehe, und wenn ja, warum?