我已经读过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”。
这是否意味着静态变量是继承的,但它们遵循数据隐藏的概念?
答案 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
静态变量是继承的,只要它们不被另一个具有相同标识符的静态变量隐藏即可。