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
只要静态变量不被具有相同标识符的另一个静态变量隐藏,它们就会被继承。
归档时间: |
|
查看次数: |
8261 次 |
最近记录: |