关于Java父类的私有成员是否会被继承

答案

不会

出发

可以查看oracle出的关于Java的解释文件https://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.2

关于Java父类的私有成员是否会被继承_第1张图片

这里写的已经是相当明白了,私有变量,不会继承。

问题

可是子类确实通过调用父类的方法,访问到了私有成员,而且,子类调用在父类方法中的this.getClass(),得到的就是子类。难道私有成员也被继承了?oracle的开发文档写错了?

我不这么认为,很多人都通过反射的方法获取过父类的私有成员,可是谁是用子类本身获取的?没有。都是通过子类得到父类,再通过父类得到相关的私有成员。私有成员是否被继承,显然没有这么简单。

结论

在这篇博客https://blog.csdn.net/qq_27760433/article/details/72889104,我发现了一个让我很赞同的解释。

子类的创建并不会导致父类被创建,创建对象的本质,也不过是给一个对象在堆内存中开扩一个空间,而构造器的作用,是在对象创建完成(这一点,我不认为应该是初始化阶段,初始化阶段应该是为注入默认初始值保证没有赋予值,也能正常使用)之后阶段,并不是在分配空间的阶段。

每次创建子类时,会将父类的私有变量单独存放到一个动态链接父类的堆内存中,父类对象并不存在,然后将父类构造器放入子类构造器前方,依次执行。父类的private成员和其他成员并不在一起。子类通过父类方法访问动态绑定的私有成员。

这样就能解释上面的问题,父类对象并不存在,所以this.getClass()也只能得到子类信息。

你可能感兴趣的:(java)