静态方法的protected修饰符的用途是什么

And*_*niy 9 java oop static-methods protected

protected在搜索我的问题的解决方案时发现了使用修饰符:忽略带有单元的反射词组件ReflectionComparator

org.unitils.reflectionassert.ReflectionComparatorFactory课堂上有签名的方法:

protected static List<Comparator> getComparatorChain(Set<ReflectionComparatorMode> modes)

但这只是特殊情况.

毕竟我们总是可以扩展这样的任何非final类,并protected使用new public修饰符"覆盖"它的静态方法.说,我们有课A:

public class A {
    protected static void test() {
        // do some stuff
    }
}
Run Code Online (Sandbox Code Playgroud)

并希望在另一个包中使用它:

public class UseA {
    private static class MyA extends A {
        public static void test() {
            A.test();
        }
    }

    void useA() {
        // A.test(); compile error, sure
        MyA.test();
    }
}
Run Code Online (Sandbox Code Playgroud)

当某些static方法被宣布为时,我将我的问题集中在一般情况上protected.我不是在询问非静态字段或方法,因为在某些情况下,类可以具有私有构造函数或具有许多特殊参数的非常复杂的构造函数.但是如果整个班级不是这样的"隐藏"静态方法的目的是什么final?这种用法是错误还是只是非常弱的"保护"?

Pat*_*k W 2

覆盖静态方法引用意味着隐藏其实现。请参阅:Java 文档的重写和隐藏方法

静态方法

如果子类定义了与超类中的静态方法具有相同签名的静态方法,则子类中的方法将隐藏超类中的静态方法。

隐藏静态方法和重写实例方法之间的区别具有重要含义:

  • 被调用的重写实例方法的版本是子类中的版本。
  • 调用的隐藏静态方法的版本取决于它是从超类还是子类调用。