黑马程序员技术交流社区
标题:
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