Wie force-Implementierung einer Methode in der Unterklasse, ohne über abstrakte?
Möchte ich Kraft Unterklasse zu implementieren, die eine implementierte Methode meiner Mutter Klasse.
Ich schau heute Java - Force-Implementierung einer Methode implementiert aber ich kann nicht konvertieren meine Mutter-Klasse zu einer abstrakten Klasse.
public class myMotherClass {
myMethod {
...some code ..
}
}
public class myClass extends myMotherClass {
myMethod {
... other code ...
}
}
So, in diesem Beispiel, will ich Kraft myClass myMethod implementieren.
Sorry für mein Englisch...
Kurz gesagt: Sie können nicht, ohne dass es Abstrakt
Was ist eine Schnittstelle?
Ist dies nicht möglich, mithilfe von Annotationen oder durch das werfen einer Ausnahme, wenn die Klasse nicht implementieren Sie die Methode?
Natürlich gibt es Möglichkeiten, um so ein Verhalten von changig das design. Alles was ich sage ist zwingend zu überschreiben, eine nicht abstrakte Methode aus einer Oberklasse ist nicht möglich. Eine Schnittstelle würde nicht helfen, entweder als Oberklasse würde auch die Umsetzung. Diese Art der Unterklasse wieder würde nicht gezwungen werden, um die Methode zu implementieren.
Was ist eine Schnittstelle?
Ist dies nicht möglich, mithilfe von Annotationen oder durch das werfen einer Ausnahme, wenn die Klasse nicht implementieren Sie die Methode?
Natürlich gibt es Möglichkeiten, um so ein Verhalten von changig das design. Alles was ich sage ist zwingend zu überschreiben, eine nicht abstrakte Methode aus einer Oberklasse ist nicht möglich. Eine Schnittstelle würde nicht helfen, entweder als Oberklasse würde auch die Umsetzung. Diese Art der Unterklasse wieder würde nicht gezwungen werden, um die Methode zu implementieren.
InformationsquelleAutor Maniz | 2013-08-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kann man nicht erzwingen, eine Unterklasse eine Methode überschreiben. Sie können nur Kraft, es, eine Methode zu implementieren, indem es Abstrakt.
Also, wenn Sie nicht machen können myMotherClass abstract können Sie nur präsentieren, eine weitere Oberklasse, erweitert myMotherClass und die Delegierten der Methode, die implementiert werden müssen:
BEARBEITEN
Fand ich eine andere interessante Art und Weise zu lösen, das problem in den
hemcrest
api, die z.B. durch mockito.Die Schnittstelle gibt an, welche Methode
_dont_implement_Matcher___instead_extend_BaseMatcher_
. Natürlich ist es nicht verhindern, dass andere aus der Umsetzung derMatcher
- Schnittstelle, aber es führt den Entwickler in die richtige Richtung.Und die
BaseMatcher
- Klasse implementiert die_dont_implement_Matcher___instead_extend_BaseMatcher_
Methode als finalSchließlich denke ich, dass dies ein design-problem, weil die
BaseMatcher
obviouosly Logik implementiert, dass jederMatcher
implementieren sollten. So wäre es besser gewesen, um dieMatcher
eine abstrakte Klasse, und die Verwendung einer template-Methode.Aber ich denke, Sie haben es getan, weil es war der beste Kompromiss zwischen bytecode-Kompatibilität und neuen features.
InformationsquelleAutor René Link
Könnte man überarbeiten Sie Ihre Hierarchie so, dass Sie Ihre konkreten Klassen werden nur die Blätter des Baumes.
Statt
Betrachten
Diese Weise der Abstrakten Klasse geerbt wird, die von beiden Klassen instanziiert. Es ist wahrscheinlich, dass in diesem Fall die
myMotherClass
wäre extrem Dünn, nur die UmsetzungmyMethod
.InformationsquelleAutor Karthik T
Eine Sache, die meisten Menschen sind mit Blick ist die folgende Implementierung (obwohl ich sah, erwähnt es in einem Kommentar):
In den meisten Fällen sollte dieses genug sein, so sollten Sie einige form der Abnahme (auch wenn es nur zum testen die erbende Klasse per hand). In der Theorie, Sie sind immer noch die Einführung der Möglichkeit, dass niemand erkennen wird, dass die Methode noch nicht overwitten bis die Produktion aber.
InformationsquelleAutor bnunamak
Wenn Sie wirklich wollen, zu zwingen, zu implementieren Methode verwenden, sollten die Nutzung
interface
.Nun, wenn jemand umsetzen wollen, von dieser Schnittstelle
MyClass implements MyInterface
setzen SiemyMethod();
InformationsquelleAutor Ruchira Gayan Ranaweera