A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 linweiwen 于 2014-4-8 17:46 编辑

早上回顾突然被弄糊涂了,
查了一下找不到解答,各有说法。
子类继承了父类的非私有变量和方法,
但对于私有变量和方法,是子类对象里面也有而不能用呢?
还是根本就没有?

麻烦给个说法,最好把根据也说一下,谢谢。

评分

参与人数 1技术分 +1 收起 理由
ily521125 + 1

查看全部评分

6 个回复

倒序浏览
“继承”一词的概念,在 Java 中,继承一词的意义是有限制的。一个子类只能继承其父类的可访问的成员,并且该子类没有覆盖或者说隐藏父类中的那些可访问成员。所以,一个类的成员就是指在这个类中所声明的属性和方法,再加上从其父类继承而来的属性和方法。也就是说,子类是不能继承父类的私有成员的。  虽然子类不继承父类中的私有成员,但是在父类中生命的这些私有成员仍然是子类类型对象的一部分。因为在实例化对象的时候,只初始化在当前类中所声明的属性明显是不足够的,还需要初始化其父类中所有声明的属性。在实例化的过程中,JVM 需要为对象的类及其父类中所有定义的属性分配空间,包括父类中声明的私有成员。  所以,我们可以说:子类不能从父类继承私有成员,但是子类的对象是包括子类所不能从父类中继承的私有成员的。

评分

参与人数 1技术分 +1 收起 理由
ily521125 + 1

查看全部评分

回复 使用道具 举报 1 0
父类的私有变量也是存在的,否则怎么能够通过 父类的非私有方法访问父类的私有变量.
回复 使用道具 举报
我觉得可以这样理解下:
子类继承父类的一切,private只是访问控制。
一个子类对象包含一个完整的父类子对象,这点从内存分配上就可以知道。
一个子类在创建的时候,也创建了一个完整的父类子对象,即先分配父类对象的存储空间,再扩展自身的存储空间,这样子类才能通过调用父类的public方法,在相应的内存地址找到对应的private属性。既然子类对象的存储空间包含了父类的private属性的存储空间,就说明子类还是继承了父类的private属性,只是不能直接访问这块内存地址而已。

评分

参与人数 1技术分 +1 收起 理由
ily521125 + 1

查看全部评分

回复 使用道具 举报
子类继承了父类,那父类的非私有变量和方法子类都可以有吧。super();就是。
回复 使用道具 举报
二楼到四楼的解答都比较有用,
话说论坛现在都不提示有新回复的?
回复 使用道具 举报
父类的私有变量和方法子类是不会继承的,私有表示有private修饰,子类是看不到父类的私有变量和方法的,就不用谈继承了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马