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

© 耀阳圣尊 金牌黑马   /  2015-4-27 20:26  /  931 人查看  /  14 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 耀阳圣尊 于 2015-4-28 15:38 编辑

java继承和多态一律在本帖回复!如果不是相关的问题本帖暂不回复!这样也是为了方便大家阅读,如果本次活动的其他问题,请到相关的帖子提问!
导航帖的链接:http://bbs.itheima.com/forum.php ... p;page=1&extra=

14 个回复

倒序浏览
在父类成员变量被私有化的情况下,子类继承父类后建立对象,为什么子类对象可以访问到被私有化的父类成员变量? 且在堆内存中并无父类成员变量存在,也无在内存空间中开辟内存空间?
回复 使用道具 举报
这个问题有点叼啊     被私有了还可以访问?
回复 使用道具 举报
Autism 发表于 2015-4-28 23:43
在父类成员变量被私有化的情况下,子类继承父类后建立对象,为什么子类对象可以访问到被私有化的父类成员变 ...

子类的空构造方法里默认隐藏了super();,所以在加载子类同时也是加载了父类,子类若没有设置与父类同名的成员变量会默认引用父类的成员变量进行初始化。这是我的总结,希望对你有帮助……
回复 使用道具 举报
这两块知识点怎么听明白了,怎么不太会用啊
回复 使用道具 举报
Autism 发表于 2015-4-28 23:43
在父类成员变量被私有化的情况下,子类继承父类后建立对象,为什么子类对象可以访问到被私有化的父类成员变 ...

子类确实不能直接访问父类的私有成员变量和方法,但是你的父类可以提供一个get() 间接的访问父类的私有的成员变量。其实堆内存中创建的子类对象中包含一个父类的引用,就像楼下的哥们说的,super。其实代表的是父类中的一个空间,在这个空间中有父类的私有成员变量,子类就会找到这片区域对自己进行初始化,已达到创建创建对象目的。就像儿子问爸爸要钱,但是妈妈不同意,可是爸爸想给儿子。于是就把钱放到架子上的衣服里,儿子看懂了爸爸的意思,就取到了钱!也不知道我比喻的形象不。
回复 使用道具 举报
winelx 发表于 2015-4-29 00:41
这两块知识点怎么听明白了,怎么不太会用啊

这两个问题 不是学了就要马上去用,比如只有恰当的时候使用效果才最好,比如说你继承一个类,发现里面有一些的方法不是很好,你可以重写这个方法,直接就将这个两个都用到了
回复 使用道具 举报
Autism 发表于 2015-4-28 23:43
在父类成员变量被私有化的情况下,子类继承父类后建立对象,为什么子类对象可以访问到被私有化的父类成员变 ...

完全听不懂,能麻烦您把您说的代码示例贴出来看看么?除了暴力反射我还真不知道如何直接访问被私有的东西
回复 使用道具 举报
考不上黑马 发表于 2015-4-29 10:27
完全听不懂,能麻烦您把您说的代码示例贴出来看看么?除了暴力反射我还真不知道如何直接访问被私有的东西 ...

D:\M.jpg
回复 使用道具 举报
  1. public class Father {

  2.         private String name = "lisi";

  3.         public String getName() {
  4.                 return name;
  5.         }

  6.         public void setName(String name) {
  7.                 this.name = name;
  8.         }
  9.        
  10.        
  11. }


  12. public class Son extends Father{

  13.         public static void main(String[] args) {
  14.                
  15.                 Father son = new Son();
  16.                 son.setName("zhangsan");
  17.                 System.out.println(son.getName());
  18.         }
  19. }
复制代码
回复 使用道具 举报
如果是父类引用指向子类对象,可以通过父类的引用变量调用父类的私有成员变量,即是在多态的情况下;如果是单独的继承父类,子类并创建了自己的子类对象,是不能调用父类的私有成员变量,因为私有化了不能被继承
回复 使用道具 举报
耀阳圣尊 发表于 2015-4-29 09:07
子类确实不能直接访问父类的私有成员变量和方法,但是你的父类可以提供一个get() 间接的访问父类的私有的 ...

谢谢,楼主解答。以下为今日列出的详细解答,不知道是不是有什么不同见解!

继承.jpg (1.14 MB, 下载次数: 15)

继承.jpg

评分

参与人数 1技术分 +2 收起 理由
耀阳圣尊 + 2

查看全部评分

回复 使用道具 举报
Autism 发表于 2015-4-29 22:06
谢谢,楼主解答。以下为今日列出的详细解答,不知道是不是有什么不同见解!

...

回答的挺好的,也很详细。就是图片看的有点费劲{:3_62:}
回复 使用道具 举报
耀阳圣尊 发表于 2015-4-30 14:10
回答的挺好的,也很详细。就是图片看的有点费劲

好吧。还是谢谢你哦,我已经懂了。。{:3_53:}
回复 使用道具 举报
子类的确是不能直接访问父类的私有成员变量和方法,但是你的父类可以提供一个get() 间接的访问父类的私有的成员变量。其实堆内存中创建的子类对象中包含一个父类的引用,前几楼的哥们说的,super。其实代表的是父类中的一个空间,在这个空间中有父类的私有成员变量,子类就会找到这片区域对自己进行初始化,已达到创建创建对象目的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马