仅Java包变量和继承

仅Java包变量和继承,java,inheritance,packages,Java,Inheritance,Packages,我在不同的包中有这两个类(命名为a和b) 我知道Arb类型的实例无法访问字段health,因为该字段不可见,所以Arb实例不存在该字段。它继承的只是public void show()方法。直到现在。 但是从我的测试中,通过对象c调用方法show会输出答案100,作为树对象的初始值 我理解这一点的问题是:该方法调用this.health,因此只要对象c调用该方法,this=c。但是健康状况不应该是可见的 有人能解释一下那里到底发生了什么吗?谢谢大家! 你的陈述“所以它不存在”是不正确的。它存在,

我在不同的包中有这两个类(命名为a和b)

我知道Arb类型的实例无法访问字段health,因为该字段不可见,所以Arb实例不存在该字段。它继承的只是public void show()方法。直到现在。 但是从我的测试中,通过对象c调用方法show会输出答案100,作为对象的初始值

我理解这一点的问题是:该方法调用this.health,因此只要对象c调用该方法,this=c。但是健康状况不应该是可见的

有人能解释一下那里到底发生了什么吗?谢谢大家!

你的陈述“所以它不存在”是不正确的。它存在,只是不可见


Arb
的实例也是
Tree
的实例,
Tree
中的代码可以看到该字段,而
Arb
中的代码看不到该字段。

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

所有内容都是继承的,而不仅仅是
show()
(和
main
);只有在
Arb
中可以访问的
public
内容。
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
{

}