是否继承了静态变量

时间:2016-05-14 11:47:36

标签: java inheritance static data-hiding

我已经读过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);
    }
}

现在输出是“Child”。

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

3 个答案:

答案 0 :(得分:17)

“继承”并不是对正在发生的事情的理想描述;描述它的更好方法是在基类的子类中静态变量 shared

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

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

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

答案 1 :(得分:3)

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

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

答案 2 :(得分:2)

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

静态变量是继承的,只要它们不被另一个具有相同标识符的静态变量隐藏即可。