Java包仅变量和继承

时间:2016-01-08 16:53:03

标签: java inheritance packages

我在不同的包中有这两个类(名为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 。但 健康 不应该是可见的......

有人可以解释那里发生的事情吗?谢谢!

2 个答案:

答案 0 :(得分:1)

您的陈述“因此它不存在”不正确。它存在,它只是不可见。

Arb的实例也是Tree的一个实例,Tree中的代码可以查看字段,Arb中的代码看不到它。

答案 1 :(得分:0)

正如您所说,Arb类继承了Tree类的公共show()方法。调用Arb类的方法show()时,实际上是在Tree中调用show()方法。由于此方法可以查看字段health,因此它也可以打印它的值。