如何解决如何在子类中公开受保护的静态字段?
我有此代码:
class A {
protected static final String foo = "FOO";
}
class B extends A {
public static final String foo;
}
我希望System.out.println(B.foo)
打印FOO
,但它会打印null
。
我知道我可以通过使用以下方法替换B
中的字段声明来解决此问题:
class B extends A {
public static final String foo() { return foo; }
}
是否可以继承受保护的静态字段并将其公开?
类B用作模拟对象,并添加这些括号以使调用为B.foo()
而不是B.foo
并不重要,但我只是想知道是否有可能摆脱它他们,如果是的话,是否有充分的理由不这样做。或者,如果我的方法在其他方面完全错误。
解决方法
我希望
System.out.println(B.foo)
打印FOO
,但它会打印null
。
这是因为B.foo
不会覆盖A.foo
;相反,它在A.foo
后面加上阴影-换句话说,B.foo
是一个新变量,与A.foo
分开,恰好具有相同的名称。
变量不能被覆盖,静态方法也不能被覆盖。
在子类中只能覆盖非静态方法。
是否可以继承受保护的静态字段并将其公开?
否。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。