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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

以前没注意这个问题,刚才回答比人问题时候编程试验了下,发现了好多问题啊···(有点绕嘴)
大概是,我在父类中定义了一个有参的构造函数以后,子类中必须要在构造函数中调用super。不然编译器报错,如下
  1. class Person
  2. {
  3.         private String name;
  4.         
  5. //        Person(){  //注释掉,子类就会报错
  6. //               
  7. //       }
  8.         public Person(String name)
  9.         {
  10.                 this.name=name;
  11.         }
  12.         public String getName()
  13.         {
  14.                 return name;
  15.         }
  16. }
  17. class Student extends Person
  18. {       
  19.                 String name;
  20.                 Student(String name){ // 要我必须
  21.                         this.name = name ;
  22.         }       
  23.        
  24. }
复制代码
注释掉了person()后,子类就必须调用super,而在父类中显示定义了Person()以后,子类就可以随便定义构造函数了··。
子类自己定义自己的构造函数咋就不可以呢。为什么非要调用父类的super()呢??

4 个回复

正序浏览
本帖最后由 李啸 于 2012-5-22 10:36 编辑

这个帖子发了好长时间了 进才看到 也才想到这个问题 我想知道Java这么设计 在子类实例化的时候为什么先要去实例父类 真的不明白 求解释(推荐版主也回答)
我是第十期的准黑马学员
回复 使用道具 举报
本帖最后由 朱俊 于 2012-5-16 15:07 编辑

~~~~~~~~~~~~~~~~~~~~~~~~~~~~

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

回复 使用道具 举报
子类的构造函数第一行都默认有一个Supper()语句,可以不写,自动初始化父类的无参构造函数;
如果一个类没有定义构造函数,系统默认一个无参的构造函数,如果定义了就以定义的为准,在你定义的类中,注释掉了person()后,父类实际上只有一个有参的构造函数,子类调用Supper(),又找不到该函数所以报错
回复 使用道具 举报
因为子类中的构造函数中第一行都有一句隐式的SUPER()。所以在初始化的时候会先初始化父类的构造函数。

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

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