Was ist der Zweck des geschützten Modifikators für statische Methoden?

9

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 :

%Vor%

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"?

    
Andremoniy 21.04.2015, 12:50
quelle

2 Antworten

2

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.
  •   
    
Pat Wanjau 21.04.2015 13:11
quelle
2
  

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 .

    
dominicoder 10.09.2017 18:50
quelle

Tags und Links