最近学习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(),才能得到对应的值。
但是通过网络搜索,发现有不少人也有这样的疑惑?回答问题的人中,有人认为没有创建父类对象,有人认为创建了,我也越来越搞不懂了......
有没有大牛能帮忙解下疑惑?万分感激!!
同时也希望大家能多多留言,写出自己的看法,大家交流交流,共同进步