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