Ich fand eine solche Verwendung von protected
Modifier bei der Suche nach Lösung für meine Frage: Ignorieren des Falls in Strings mit uniteils ReflectionComparator
In org.unitils.reflectionassert.ReflectionComparatorFactory
class gibt es eine Methode mit Signatur:
protected static List<Comparator> getComparatorChain(Set<ReflectionComparatorMode> modes)
Aber das ist nur ein besonderer Fall.
Immerhin können wir jede beliebige nicht-finale Klasse erweitern und ihre statische protected
-Methode mit dem neuen public
-Modifikator überschreiben. Sagen wir, wir haben die Klasse A
:
und möchte es in einem anderen Paket verwenden:
%Vor% Ich konzentriere meine Frage auf die allgemeine Situation, wenn eine static
-Methode als protected
deklariert wurde. Ich frage nicht nach nicht statischen Feldern oder Methoden, da die Klasse in manchen Fällen einen privaten Konstruktor oder einen sehr komplizierten Konstruktor mit vielen speziellen Parametern haben kann. Aber was ist der Zweck solcher "versteckten" statischen Methoden, wenn die gesamte Klasse nicht final
ist? Ist solche Verwendung oop Fehler oder nur sehr schwachen "Schutz"?
Das Überschreiben einer statischen Methodenreferenz bedeutet das Verbergen der Implementierung. Siehe: Methoden zum Überschreiben und Ausblenden der Java-Dokumentation
Statische Methoden
Wenn eine Unterklasse eine statische Methode mit derselben Signatur wie eine statische Methode in der Oberklasse definiert, blendet die Methode in der Unterklasse die eine in der Oberklasse aus.
Der Unterschied zwischen dem Ausblenden einer statischen Methode und dem Überschreiben einer Instanzmethode hat wichtige Auswirkungen:
- Die Version der überschriebenen Instanzmethode, die aufgerufen wird, ist diejenige in der Unterklasse.
- Die Version der versteckten statischen Methode, die aufgerufen wird, hängt davon ab, ob sie von der Oberklasse oder der Unterklasse aufgerufen wird.
Aber was ist der Zweck solcher "versteckten" statischen Methoden, wenn die ganze Klasse nicht endgültig ist?
Mit einer protected static
-Methode können Sie abgeleiteten Klassen Funktionen vom Typ "Utility" bereitstellen, ohne sie in der öffentlichen API verfügbar zu machen, wo sie für sich allein keinen Sinn ergeben.
Ich kenne die Implementierung der Methode getComparatorChain
, auf die Sie verweisen, nicht, aber ich kann mir vorstellen, dass es eine solche Methode ist. Es wäre static
markiert, wenn es nicht an eine bestimmte Instanz gebunden ist, und protected
markiert, um nicht Teil der öffentlichen API zu sein, aber auch abgeleiteten Klassen die Verwendung der Hilfsmethode in ihrer eigenen Implementierung zu ermöglichen .
Tags und Links java static-methods oop protected