黑马程序员技术交流社区

标题: 关于继承 大家来讨论讨论吧 [打印本页]

作者: 北极的男娃    时间: 2015-10-27 21:46
标题: 关于继承 大家来讨论讨论吧
父类有一个私有属性  子类可以通过get set 访问这个属性  但是私有属性是不能继承的  那么子类到底有没有这个属性?  我问了老师 老师说通过get set可以间接获取这个属性  所有子类也是拥有这个属性的。
你们觉得呢?
作者: 小小鑫    时间: 2015-10-27 22:00
子类可以通过方法获取这个属性没错,但是访问的毕竟是父类中的,我觉的并不属于本类中.主函数中也可以简介获取这个属性,要是像你那么说,岂不是主函数中也有了这个属性!
作者: 北极的男娃    时间: 2015-10-27 22:07
小小鑫 发表于 2015-10-27 22:00
子类可以通过方法获取这个属性没错,但是访问的毕竟是父类中的,我觉的并不属于本类中.主函数中也可以简介获 ...

假如父类有个私有 name 和私有 age
新建子类对象赋给了 张三 23
那么输出 son.getName 这个不是son的名字吗
主函数间接获取也有一个前提是建立了一个对象
作者: 小小鑫    时间: 2015-10-27 22:12
但是子类在堆内存中的空间中确实是没有父类私有化的成员的,怎么解释!
作者: dai2686779    时间: 2015-10-27 22:14
66666666666666
作者: 小小鑫    时间: 2015-10-27 22:16
不论子类对象给父类的私有化成员赋值还是获取值,都是用到了父类对象对外提供的set,get 方法,而这方法本来就是用来设置和获取私有化值的,之所以用public修饰就是要所有人都可以用,子类调用S,G方法也是理所应当,这不也恰恰说明了这些私有化成员没有在子类中么!!
作者: 北极的男娃    时间: 2015-10-27 22:21
小小鑫 发表于 2015-10-27 22:16
不论子类对象给父类的私有化成员赋值还是获取值,都是用到了父类对象对外提供的set,get 方法,而这方法本来就 ...

子类的确不能直接访问 但是通过那两种方法就间接获取了   
假如那两个属性是public的  那么在堆内存中 子类对象为了初始化从父类继承的属性  会割出一块内存空间来让父类的构造方法初始化那个属性
同理  如果是private的  他通过set  get访问  获取时也会割出空间
作者: 307117758    时间: 2015-10-27 22:24
有点咬文爵字了,子类应该是不含有这个属性,但是可以获取这个属性。
作者: 北极的男娃    时间: 2015-10-27 22:25
小小鑫 发表于 2015-10-27 22:12
但是子类在堆内存中的空间中确实是没有父类私有化的成员的,怎么解释!

子类对象割出来的空间就是给私有化成员用的啊  也在堆内存中
作者: 北极的男娃    时间: 2015-10-27 22:26
307117758 发表于 2015-10-27 22:24
有点咬文爵字了,子类应该是不含有这个属性,但是可以获取这个属性。

他开始是不含有的   但是获取了 不就含有了吗
作者: 307117758    时间: 2015-10-27 22:29
北极的男娃 发表于 2015-10-27 22:26
他开始是不含有的   但是获取了 不就含有了吗

也不是他的,至少通过get方法返回了父类的私有变量,本质上不算他的
作者: 北极的男娃    时间: 2015-10-27 22:32
307117758 发表于 2015-10-27 22:29
也不是他的,至少通过get方法返回了父类的私有变量,本质上不算他的

总得有地址值吧 如果内存中没有 他从哪给初始化 给赋值
作者: 小小鑫    时间: 2015-10-27 22:37
北极的男娃 发表于 2015-10-27 22:21
子类的确不能直接访问 但是通过那两种方法就间接获取了   
假如那两个属性是public的  那么在堆内存中 子 ...

我觉得咱再这么僵下去也不会有结果,不如咱俩都冷静冷静,放空自己,明天一早再来想这个问题,,如果还是认为自己是对的,明晚在好好讨论!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2