【问题标题】:How can I make a protected static field public in sub class?如何在子类中公开受保护的静态字段?
【发布时间】:2021-01-09 16:35:45
【问题描述】:

我有这个代码:

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 并不重要,但我只是感兴趣是否可以摆脱它们,并且如果是,是否有充分的理由不这样做。或者如果我的方法在其他方面完全错误。

【问题讨论】:

标签: java class inheritance static


【解决方案1】:

我希望System.out.println(B.foo) 打印FOO,但它打印null

那是因为B.foo 没有覆盖A.foo;相反,它会隐藏 A.foo - 换句话说,B.foo 是一个新变量,与 A.foo 不同,它恰好具有相同的名称。

变量不能被覆盖,静态方法不能被覆盖。

子类中只能重写非静态方法。

是否可以继承受保护的静态字段并将其公开?

没有。

【讨论】:

  • 很公平。然后我使用这些方法。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-05
  • 2013-05-27
  • 2022-01-17
  • 1970-01-01
  • 2015-06-30
  • 1970-01-01
  • 2011-06-22
相关资源
最近更新 更多