首页 新闻 会员 周边

子类对象在创建的同时,是否创建了父类对象?或者说申请了多余的内存空间,用于保存不可见的父类属性?

0
[已关闭问题] 解决于 2018-03-06 18:48

最近学习java,学到继承的这一块,突然产生了题目所说的疑惑。

例如下面的代码:

父类:

复制代码
 1 public class Person {
 2     private String name;
 3 
 4     
 5     public void setName(String name){
 6         this.name = name;
 7     }
 8     public String getName(){
 9         return this.name;
10     }
11 
12 }
复制代码

子类:

1 public class Student extends Person {
2     
3 }

在实际使用的时候,创建一个Student 的对象 st1,不能访问 name属性,但是却能调用setName(),getName()方法。

我的疑惑是,该对象 st1,在创建的时候,系统是否在分配类存空间的时候,同时也分配了一个用于保存name属性的空间,这个空间是隐藏的,不能st1直接使用,但能通过父类的方法进行访问??也就是说这个st1对象,其实是也可以看作一个特殊的父类的对象,特殊之处在于属性不可见?

如果不是这样,那么当我,使用了 st1.setName("xxx"); 字符串"xxx",又被保存在什么地方?

本来我认为应该是可以这样理解的,这个空间就是隐藏着的父类对象属性,所以在使用 st1.getName(),才能得到对应的值。

但是通过网络搜索,发现有不少人也有这样的疑惑?回答问题的人中,有人认为没有创建父类对象,有人认为创建了,我也越来越搞不懂了......

有没有大牛能帮忙解下疑惑?万分感激!!

同时也希望大家能多多留言,写出自己的看法,大家交流交流,共同进步

准备入行的程序员的主页 准备入行的程序员 | 菜鸟二级 | 园豆:202
提问于:2018-03-02 01:10
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册