黑马程序员技术交流社区

标题: Java 中子类“得到”父类的私有变量和方法? [打印本页]

作者: linweiwen    时间: 2014-4-8 09:20
标题: Java 中子类“得到”父类的私有变量和方法?
本帖最后由 linweiwen 于 2014-4-8 17:46 编辑

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

麻烦给个说法,最好把根据也说一下,谢谢。
作者: zhangbingyuan    时间: 2014-4-8 09:46
“继承”一词的概念,在 Java 中,继承一词的意义是有限制的。一个子类只能继承其父类的可访问的成员,并且该子类没有覆盖或者说隐藏父类中的那些可访问成员。所以,一个类的成员就是指在这个类中所声明的属性和方法,再加上从其父类继承而来的属性和方法。也就是说,子类是不能继承父类的私有成员的。  虽然子类不继承父类中的私有成员,但是在父类中生命的这些私有成员仍然是子类类型对象的一部分。因为在实例化对象的时候,只初始化在当前类中所声明的属性明显是不足够的,还需要初始化其父类中所有声明的属性。在实例化的过程中,JVM 需要为对象的类及其父类中所有定义的属性分配空间,包括父类中声明的私有成员。  所以,我们可以说:子类不能从父类继承私有成员,但是子类的对象是包括子类所不能从父类中继承的私有成员的。
作者: 年轻的老头    时间: 2014-4-8 10:24
父类的私有变量也是存在的,否则怎么能够通过 父类的非私有方法访问父类的私有变量.
作者: 阿旺    时间: 2014-4-8 10:58
我觉得可以这样理解下:
子类继承父类的一切,private只是访问控制。
一个子类对象包含一个完整的父类子对象,这点从内存分配上就可以知道。
一个子类在创建的时候,也创建了一个完整的父类子对象,即先分配父类对象的存储空间,再扩展自身的存储空间,这样子类才能通过调用父类的public方法,在相应的内存地址找到对应的private属性。既然子类对象的存储空间包含了父类的private属性的存储空间,就说明子类还是继承了父类的private属性,只是不能直接访问这块内存地址而已。

作者: X-Sniper²º¹    时间: 2014-4-8 12:20
子类继承了父类,那父类的非私有变量和方法子类都可以有吧。super();就是。
作者: linweiwen    时间: 2014-4-8 12:43
二楼到四楼的解答都比较有用,
话说论坛现在都不提示有新回复的?
作者: ily521125    时间: 2014-4-8 19:31
父类的私有变量和方法子类是不会继承的,私有表示有private修饰,子类是看不到父类的私有变量和方法的,就不用谈继承了




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