我在不同的包中有这两个类(名为a和b)
package a;
import b.*;
public class Tree
{
int health = 100;
public void show()
{
System.out.println(this.health);
}
public static void main(String[] args)
{
Arb c = new Arb();
//System.out.println(c.health); is not visible
c.show();
}
}
package b;
import a.*;
public class Arb extends Tree
{
}
我知道字段 健康 不能被Arb类型的实例加入,因为它不可见,因此它不存在Arb的一个例子。它继承的所有内容都是 public void show() 方法。好的,直到现在。 但是从我的测试中,通过对象 c 调用方法 显示 会输出答案100,作为a的初始值 树 对象。
我理解这个问题的方法是:该方法调用 this.health ,只要对象 c 调用此方法, 此 = c 。但 健康 不应该是可见的......
有人可以解释那里发生的事情吗?谢谢!
答案 0 :(得分:1)
您的陈述“因此它不存在”不正确。它存在,它只是不可见。
Arb
的实例也是Tree
的一个实例,Tree
中的代码可以查看字段,Arb
中的代码看不到它。
答案 1 :(得分:0)
正如您所说,Arb类继承了Tree类的公共show()
方法。调用Arb类的方法show()
时,实际上是在Tree中调用show()
方法。由于此方法可以查看字段health
,因此它也可以打印它的值。