是否继承了静态变量

Ama*_*man 2 java inheritance static data-hiding

我已经读过1000个位置的静态变量没有被继承.但那么这段代码如何正常工作呢?

Parent.java

public class Parent {
        static String str = "Parent";
    }
Run Code Online (Sandbox Code Playgroud)

Child.java

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

此代码打印"父".

还可以在几个位置读取数据隐藏的概念.

Parent.java

public class Parent {
    static String str = "Parent";
}
Run Code Online (Sandbox Code Playgroud)

Child.java

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

    public static void main(String [] args)
    {
        System.out.println(Child.str);
    }
}
Run Code Online (Sandbox Code Playgroud)

现在输出是"Child".

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

das*_*ght 18

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

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

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

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


小智 7

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

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