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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zxg08042810 中级黑马   /  2014-2-26 11:16  /  864 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

请问在继承体系中,在实例化子类时,父类中的中的变量和方法在子类中会不会还会有一份,也就是一共两份?

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

3 个回复

倒序浏览
只有一份,跟父类共用的。
创建一个子类的对象的时候,会先调用父类的构造函数来创建一个父类的对象,这个父类对象被包含在子类对象的内部。所以,子类在继承父类时所继承的属性和方法(非私有的)是和父类共用的,不过,这个父类对象里的属性和方法必须通过子类对象才能访问到,因为它是包含在子类对象内部的。调用子类对象中的属性和方法的时候,会先从子类对象里面找,找不到的话才去那个父类对象中找,所以如果发生了重写/覆盖,就会调用子类对象里重写的方法而不是父类对象里的。如果要在子类中调用父类中被重写/覆盖的属性和方法,必须在前面加上关键词super.

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报 2 0
不会有两份的,如果子类中出现和父类一模一样的函数时,
当子类对象调用该函数,会运行子类函数的内容.
如同父类的函数被覆盖一样,即是函数的特性:重写

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
不是你所说的一共两份,java中的继承就是类似于代码的复用,就是方便子类有输出与父类相同几人过的需求时,减少代码的编写,而直接调用父类中与此相同的功能,因为继承,顾名思义,子类可以调用父类中的属性(private属性除外,若要调用可以构造setxxx,getxxx方法)并且保留自己特有的属性,可以试想当要调用的变量,属性太多时,再一行一行的敲代码,真的太浪费时间,一个super就可以把父类中的拿过来用了,减少了代码的重复率,提高了指向效率和阅读性。

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马