在寻找我的另一个问题的解决方案时,我发现了protected
修饰符的这种用法:Ignoring case in strings with unitils ReflectionComparator
org.unitils.reflectionassert.ReflectionComparatorFactory
类中有一个带有如下签名的方法:
protected static List<Comparator> getComparatorChain(Set<ReflectionComparatorMode> modes)
但这只是一个特例。
毕竟我们始终可以扩展任何非最终类,并将其静态的protected
方法用新的public
修饰符进行“覆盖”。 假设我们有一个类A
:
public class A {
protected static void test() {
// do some stuff
}
}
并且希望在另一个软件包中使用它:
public class UseA {
private static class MyA extends A {
public static void test() {
A.test();
}
}
void useA() {
// A.test(); compile error, sure
MyA.test();
}
}
我将重点关注一般情况下某些static
方法被声明为protected
的情况。我不是在问非静态字段或方法,因为在某些情况下,类可以有一个私有构造函数或包含许多特殊参数的非常复杂的构造函数。但如果整个类不是final
,那么这种“隐藏”静态方法的目的是什么?这种用法是面向对象编程(OOP)的错误,还是只是一种非常薄弱的“保护”?
protected static
方法,我无法捕捉到这样的想法。 - Andremoniy