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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 钟佩桓 中级黑马   /  2013-4-1 23:41  /  1556 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 钟佩桓 于 2013-4-2 11:23 编辑

看到这样一个问题:如果在创建Student对象的时候没有调用Person的构造函数,那么采用什么样的手段可以调用父类的构造函数?
我是这样理解的:
子类的构造函数默认第一行有一条隐式的语句 super();super():会访问父类中空参数的构造函数。而且子类中所有的构造函数默认第一行都是super();
所以不会存在什么创建Student对象的时候没有调用Person的构造函数,只是子类中一般没用特意要调用某个父类中的构造函数时
用一个隐士super();来代替了,没有表现在函数中而已,但是JVM会读取并识别他。我的理解是对的吗,还是说有问题?请大神求教。

评分

参与人数 1技术分 +1 收起 理由
张熙韬 + 1

查看全部评分

4 个回复

倒序浏览
如果在创建Student对象的时候没有调用Person的构造函数,那么采用什么样的手段可以调用父类的构造函数?
这句话是不是问的有问题呀?,既然都没有调用Person..哪里来的父类 - -
回复 使用道具 举报
我的回答和楼上一样。顺便发一些我的学习日志,看看对你有帮助不~~
为什么子类一定要访问父类中的构造函数?

因为父类中的数据子类可以直接获取。所以子类对象在建立时,需要先查看父类是如何对这些数据进行初始化的。
所以子类在对象初始化时,要先访问一下父类中的构造函数。
如果要访问父类中指定的构造函数,可以通过手动定义super语句的方式来指定。
注意:super语句一定定义在子类构造函数的第一行。
子类的实例化过程:
子类的所有的构造函数,默认都会访问父类中空参数的构造函数。因为子类每一个构造函数内的第一行都有一句隐式super();
当父类中没有空参数的构造函数时,子类必须手动通过super语句形式来指定要访问父类中的构造函数。
当然:子类的构造函数第一行也可以手动指定this语句来访问本类中的构造函数。
子类中至少会有一个构造函数会访问父类中的构造函数。

评分

参与人数 1技术分 +1 收起 理由
张熙韬 + 1

查看全部评分

回复 使用道具 举报
子类的构造方法,不管这个构造方法带不带参数,默认的它都会先去寻找父类的不带参数的构造方法。如果父类没有不带参数的构造方法,那么子类必须用supper关键子来调用父类带参数的构造方法,否则编译不能通过。
回复 使用道具 举报
关于构造函数调用的说明:
1、如果在一个类中自己定义了一个或多个构造函数那么就没有构造函数,如果自己没有定义构造函数就有一个默认构造函数。
2、 如果父类没有定义构造函数
             子类调用默认构造函数,这时子类可以不定义构造函数。
      在父类有定义构造函数时
              默认调用无参数的构造函数,这时子类可以不定义构造函数
              如果父类没有无参数的构造函数,必须在子类构造函数中使用super指定父类的构造函数,而且子类必须定义构造函数。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马