【问题标题】:Java Inheritance of Static Variable静态变量的Java继承
【发布时间】:2019-04-28 00:49:57
【问题描述】:

我的 Base123 类中有一个静态变量

class Base123 {
    public static int statvar;
}

我有一个派生类Inheritance111,它扩展了Base123

public class Inheritance111 extends Base123 {

    public static void main(String[] args) {
        System.out.println(Inheritance111.statvar);
        System.out.println(Base123.statvar);
        Base123.statvar=10;
        System.out.println(Inheritance111.statvar);
        System.out.println(Base123.statvar);
        System.out.println(statvar);
        Inheritance111.statvar=20;
        System.out.println(Inheritance111.statvar);
        System.out.println(Base123.statvar);
        System.out.println(statvar);
    }
}

我得到上述代码的输出为:

0 0 10 10 10 20 20 20

对于一个类,静态变量在该类的所有对象之间共享。但是当一个类被扩展时,子类中继承的变量也是同一个变量吗?由于使用

所做的更改
Inheritance111.statvar=20;

正在更改Base123.statvar 的值。

【问题讨论】:

  • 静态变量不会被继承。不代表不能访问。你试过那样做吗?你得到了什么结果?
  • 静态变量在该类的所有对象之间共享,因为它属于类信息。
  • @Stultuske 如果我给 System.out.println(statvar);我从 Derived 类中看到了静态变量的值。
  • @Stultuske 那你怎么称呼它? sharing 课间?
  • @Eugene 为什么我要给它起个名字?静态成员不被继承。这并不意味着它们不能被使用。然而,这确实意味着,当它们在子类中重新定义时,它们不会覆盖,而是隐藏原来的。

标签: java inheritance static-variables


【解决方案1】:

是的,即使您从 Inheritance111.statvar=20; 这样的子类调用变量,它也引用与 Super 类相同的变量。
可以参考这个JavaDocstatic fields

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-24
    • 1970-01-01
    • 1970-01-01
    • 2016-09-10
    • 2017-01-10
    • 1970-01-01
    相关资源
    最近更新 更多