这段代码运行的步骤是这样的:
栈内存有两个引用,p1,p2,堆内存有两个对象Person(10),Person(20),
p1.getAge(p2),p1调用自己的getAge方法,将p2作为参数传递进去,返回的值是调用p2的age。
因为私有的成员只能在本类中进行访问,所以,如果将p.age换成this.age好理解一些,p1调用自己的方法,返回自己的age,把p.age化成p2.age,同this.age相同,两个都是引用,都是本类中的引用使用自己的age
这也说明了私有只在本类中有效这句话的意思是,当一个成员被私有后,通过方法暴露出去,使外界可以访问到,而调用方法是需要引用的,谁在调用方法,操作的就是谁。而在本类中有引用指向自己的私有成员,是可以被访问到的。也就是功能中可以进行this.访问,或者接收其他的本类对象的引用进行访问,同this.是一样的。都是本类的引用在调用本类的私有成员。。。。一句话的总结就是:本类对象中出现了私有成员,私有成员是可以被本类中对象的引用访问到的。。。而Test中编译失败的原因就是因为Person对象中的私有成员不可以在本类以外的地方建立引用访问私有成员。。。。。。。。。。。而如果Person中有设置年龄方法的话,接收的参数设置给的年龄也是引用中的年龄,也就是堆内存中的年龄,,,,,因为有个this.的引用。。。。操作的都是引用中的数据。返回的也是。 |