3 回答
TA贡献1784条经验 获得超2个赞
私有成员不会被继承。
我认为这可能是您在这里遗漏的关键点。这意味着Child.fun不会覆盖Parent.fun. 它们只是两个简单的旧方法,彼此无关。
当你调用时accessFun,控制总是进入下面的这段代码Parent:
public void accessFun(){
System.out.println(this);
this.fun(); <---- here
}
现在,因为我们现在在里面Parent,我们可以访问fun. 而且,由于Parent.fun是没有被覆盖,它调用Parent.fun而不是Child.fun。
我认为 fun 是子类中的私有成员,因此无法从类外部访问(甚至可以从其父类的公共成员访问)。
那是完全的误解。如果不能从类的外部访问私有成员,甚至不能通过公共方法访问,那么它们的用处就会小得多。为什么首先要拥有它们?
“私有成员只能由在同一类中声明的成员访问”可能更好记住。
TA贡献1872条经验 获得超4个赞
我认为 fun 是子类中的私有成员,因此无法从类外部访问(甚至可以从其父类的公共成员访问)。
有时一切都来自“外部”。例如,main呼叫来自外部。
如果不能从外部访问私有成员,则它始终是死代码,这是没有意义的。
区别在于对直接访问和间接访问的理解。
在所有情况下,您都可以通过 method 非直接调用该方法accessFun()。
TA贡献1821条经验 获得超6个赞
parent 中的 fun 方法是私有的,子 fun() 方法不会覆盖父 fun() 方法。但是 accessFun 方法是公共的,因此它可以从子类中调用并且可以公开访问。
因此,当您调用 accessFun() 方法时,它将调用父类 fun() 方法。不是子类 fun() 方法,因为它是私有的。这就是为什么你不会出错的原因。
添加回答
举报
