【问题标题】:Are static variables inherited静态变量是否继承
【发布时间】:2016-09-10 14:39:40
【问题描述】:

我在 1000 个位置读到静态变量不是继承的。但是这段代码是如何正常工作的呢?

Parent.java

public class Parent {
        static String str = "Parent";
    }

Child.java

public class Child extends Parent {
        public static void main(String [] args)
        {
            System.out.println(Child.str);
        }
    }

此代码打印“父母”。

还阅读了一些位置的数据隐藏概念。

Parent.java

public class Parent {
    static String str = "Parent";
}

Child.java

public class Child extends Parent {
    static String str = "Child";

    public static void main(String [] args)
    {
        System.out.println(Child.str);
    }
}

现在输出是“孩子”。

这是否意味着静态变量是继承的,但它们遵循数据隐藏的概念

【问题讨论】:

  • 你能给出“1000 个位置”中的任何一个吗
  • @Hackerdarshi --> google.co.in/…

标签: java inheritance static data-hiding


【解决方案1】:

“继承”并不是对正在发生的事情的理想描述;更好的描述方式是静态变量在基类的子类之间共享

所有派生类都可以访问其基类的静态变量。这包括受保护的变量,用继承的变量反映情况。

隐藏的概念也适用:当特定于类的变量str 出现在Child 类中时,它会隐藏父类的str 变量。

请注意,基类的变量str 不会变得不可访问:Child 仍然可以通过完全限定Parent 类的名称来访问它。

【讨论】:

    【解决方案2】:

    请查看 oracle 的文档:http://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#d5e12110

    只要静态变量没有被另一个具有相同标识符的静态变量隐藏,它们就会被继承。

    【讨论】:

    • 感谢您的回答。 1行编译它所有“静态变量被继承,只要它们没有被另一个具有相同标识符的静态变量隐藏。”
    【解决方案3】:

    这不完全是继承,它更像是共享访问您正在扩展的类的静态属性,除非您通过在子类中声明相同的标识符来隐藏它,请注意,如果您更改实例属性继承属性的值将在为您的对象实例化的超级实例中更改,但如果有另一个层次结构可能对您的层次结构视而不见,则不会受到影响。

    在静态的情况下,父属性将被更改,任何其他层次结构也将产生此效果。

    【讨论】:

      【解决方案4】:

      继承是在父类对象和子类对象(不是类而是对象)之间。类不是实际的东西,而是模板(仅限结构),当您创建子类时,模板只是扩大了,也有旧的结构(这里是静态方法)

      【讨论】:

      • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
      猜你喜欢
      • 1970-01-01
      • 2017-01-10
      • 2019-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-07
      • 2010-11-03
      • 2011-03-29
      相关资源
      最近更新 更多