静态变量是否继承
Are static variables inherited
我在 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".
另请参阅数据隐藏概念的几个位置。
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"。
那么这是否意味着静态变量是继承的但它们遵循数据隐藏的概念?
"Inherited" 不是对正在发生的事情的理想描述;更好的描述方式是说静态变量在基 class.
的子 class 中 共享
所有派生的 classes 都可以访问其基础 classes 的静态变量。这包括受保护的变量,反映了继承变量的情况。
隐藏的概念也适用:当 class 特定变量 str
出现在 Child
class 中时,它会隐藏 str
父变量 class.
请注意,基数 class 的变量 str
不会变得不可访问:Child
仍然可以通过完全限定名称 Parent
class.
请查看oracle的文档:http://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#d5e12110
只要静态变量没有被具有相同标识符的另一个静态变量隐藏,它们就会被继承。
这不完全是继承,它更像是共享访问您正在扩展的 class 的静态属性,除非您通过在子 class 中声明相同的标识符来隐藏它,请注意,在实例属性的情况下,如果您更改继承属性的值,它将在为您的对象实例化的超级实例中更改,但如果有另一个层次结构,据说对您的层次结构是盲目的,它将不会受到影响。
在静态的情况下,父属性将被更改,任何其他层次结构也会产生这种效果。
继承在parentclassobject和childclassobject之间(不是class而是objects)。 class 不是实际的东西,而是模板(仅限结构),当您创建 child class 时,teplate 只是扩大了也有旧结构(这里是静态方法)
我在 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".
另请参阅数据隐藏概念的几个位置。
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"。
那么这是否意味着静态变量是继承的但它们遵循数据隐藏的概念?
"Inherited" 不是对正在发生的事情的理想描述;更好的描述方式是说静态变量在基 class.
的子 class 中 共享所有派生的 classes 都可以访问其基础 classes 的静态变量。这包括受保护的变量,反映了继承变量的情况。
隐藏的概念也适用:当 class 特定变量 str
出现在 Child
class 中时,它会隐藏 str
父变量 class.
请注意,基数 class 的变量 str
不会变得不可访问:Child
仍然可以通过完全限定名称 Parent
class.
请查看oracle的文档:http://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#d5e12110
只要静态变量没有被具有相同标识符的另一个静态变量隐藏,它们就会被继承。
这不完全是继承,它更像是共享访问您正在扩展的 class 的静态属性,除非您通过在子 class 中声明相同的标识符来隐藏它,请注意,在实例属性的情况下,如果您更改继承属性的值,它将在为您的对象实例化的超级实例中更改,但如果有另一个层次结构,据说对您的层次结构是盲目的,它将不会受到影响。
在静态的情况下,父属性将被更改,任何其他层次结构也会产生这种效果。
继承在parentclassobject和childclassobject之间(不是class而是objects)。 class 不是实际的东西,而是模板(仅限结构),当您创建 child class 时,teplate 只是扩大了也有旧结构(这里是静态方法)