title: What is the purpose of protected modifier for static methods
body: <p>I found such an usage of <code>protected</code> modifier while searching for a solution for my other question: <a href="https://stackoverflow.com/questions/29769568/ignoring-case-in-strings-with-unitils-reflectioncomparator">Ignoring case in strings with unitils ReflectionComparator</a></p>
  
  <p>In the <code>org.unitils.reflectionassert.ReflectionComparatorFactory</code> class there is a method with the signature: </p>
  
  <p><code>protected static List&lt;Comparator&gt; getComparatorChain(Set&lt;ReflectionComparatorMode&gt; modes)</code></p>
  
  <p>But this is only a particular case.</p>
  
  <p>After all we can always extend such any non-final class and "override" it's static <code>protected</code> method with the new <code>public</code> modifier. Say, we have a class <code>A</code>:</p>
  
  <pre><code>public class A {
      protected static void test() {
          // do some stuff
      }
  }
  </code></pre>
  
  <p>and want to use it in another package:</p>
  
  <pre><code>public class UseA {
      private static class MyA extends A {
          public static void test() {
              A.test();
          }
      }
  
      void useA() {
          // A.test(); compile error, sure
          MyA.test();
      }
  }
  </code></pre>
  
  <p>I concentrate my question on a general situation when some <code>static</code> method was declared as <code>protected</code>. I'm not asking about non-static fields or methods, because in some cases class can have a private constructor or a very complicated constructor with lots special params. But what is the purpose of such "hiding" static methods if entire class isn't <code>final</code>? Is such usage an OOP mistake or just a very weak "protection"?</p>