【发布时间】:2015-08-11 08:12:45
【问题描述】:
class A
{
protected int i=10;
}
class B extends A
{
protected int i=15;
}
public class Test extends B
{
public static void main(String a[])
{
A obj=new Test();
System.out.print("i="+obj.i);
}
}
它的输出是i=10,但是如何呢?
对象的内存分配将如何进行。
【问题讨论】:
-
因为你声明它的类型是
A -
来自 Java 编程语言第 4 版:“除了可以在类本身中访问和在同一个包中进行代码访问(参见第 18 章)之外,还可以通过对象引用从类中访问受保护的成员至少与类的类型相同 - 即类的类型或其子类型之一的引用。”。第 3.5 节 -
protected的真正含义 - 如果您有兴趣了解更多信息,本书会更详细地介绍。 dl.acm.org/citation.cfm?id=1051069 -
因为声明属于 A 类,并且您正在直接访问 var i,例如,如果您在两个类中都有 getI(),则结果将为 15。
标签: java object inheritance extends