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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 mulua 于 2013-6-14 15:19 编辑

如何在创建子类的对象是不调用父类的构造函数?



主要是用来解决这一题的,第二问不知道怎么解决?
有这样三个类,Person,Student.GoodStudent。其中Student继承了Person,GoodStudent继承了Student,三个类中只有默认的构造函数,用什么样的方法证明在创建Student类的对象的时候是否调用了Person的构造函数,在创建GoodStudent类的对象的时候是否调用了Student构造函数?

如果在创建Student对象的时候没有调用Person的构造函数,那么采用什么样的手段可以调用父类的构造函数?

评分

参与人数 1技术分 +1 收起 理由
Super_Class + 1

查看全部评分

11 个回复

倒序浏览
额 这个好像不可以 java 在创建子类对象时一定会先调用父类的构造方法  就算你不写  也会默认调用的
回复 使用道具 举报
好像如果你要在子类中调用父类的构造方法就要用到super(可带参数)通过这个来调用父类的构造方法,如果不调用这个super()方法的话就不知道了,不过一般类给实例了度会自动调用一个无参数的构造方法的。
回复 使用道具 举报
这个不可以。
因为在继承中,子类的构造过程中必须调用父类的构造函数。
如果子类的构造函数中没有显示调用父类的构造函数,则系统默认调用父类无参数的构造函数。
如果子类构造函数中既没有显示调用父类构造函数,而且父类中又没有无参数的构造函数,则编译出错!!
希望可以帮到你!

评分

参与人数 1黑马币 +10 收起 理由
mulua + 10 赞一个!

查看全部评分

回复 使用道具 举报
不要去继承
回复 使用道具 举报
super:若在子类中对父类的方法重写或者添加同名属性,子类中的代码会自动调用子类中重写过的方法或者同名属性,为了使用父类中的方法或者属性,可以使用super;
        使用父类中的属性:super.属性名;
        使用父类中的方法:super.方法名(形参表列);
        使用父类的构造方法:super(形参表列);
每个子类,系统默认都会在其程序的第一行加上一句super(),意思是调用父类的无参构造方法;
要想不让子类调用父类的构造方法,除非 父类的构造方法是private的,因为子类是无法继承父类的私有成员的,或者说子类继承了父类的私有成员,
但是无法访问父类的私有成员;

评分

参与人数 1黑马币 +10 收起 理由
mulua + 10 赞一个!

查看全部评分

回复 使用道具 举报
mulua 中级黑马 2013-6-14 16:51:53
7#
蚂蚁搬家 发表于 2013-6-14 16:45
super:若在子类中对父类的方法重写或者添加同名属性,子类中的代码会自动调用子类中重写过的方法或者同名 ...

那这一题怎么解决呢
回复 使用道具 举报
mulua 发表于 2013-6-14 16:51
那这一题怎么解决呢

这个好像是一个基础测试题吧
第一问如何证明调用父类的构造方法?
你可以在父类的构造方法中对属性赋值,然后在子类中定义一个show方法,打印出属性的值,看是不是跟构造方法中赋的值是一样的。
第二问我上面已经写了,super(属性列表),这就是在子类中调用父类中构造方法的方式;
回复 使用道具 举报
子类无条件地继承父类的不含参数的构造方法。    如果子类自己没有构造方法,则它将继承父类的无参数构造方法作为自己的构造方法;如果子类自己定义了构造方法,则在创建新对象时,它将先执行继承自父类的无参数构造方法,然后再执行自己的构造方法。    对于父类含参数的构造方法,子类可以通过在自己的构造方法中使用 super 关键字来调用它,但这个调用语句必须是子类构造方法的第一个可执行语句
回复 使用道具 举报
mulua 中级黑马 2013-6-14 22:42:46
10#
蚂蚁搬家 发表于 2013-6-14 17:03
这个好像是一个基础测试题吧
第一问如何证明调用父类的构造方法?
你可以在父类的构造方法中对属性赋值, ...

第一问用构造代码块能不能证明呢
回复 使用道具 举报
mulua 中级黑马 2013-6-14 23:01:30
11#
  1. class Person
  2. {
  3.         {
  4.                 System.out.println("这是Person类的构造函数");
  5.         }
  6. }
  7. class Student1 extends Person
  8. {
  9.         {
  10.                 System.out.println("这是Student1类的构造函数");
  11.         }
  12. }
复制代码
回复 使用道具 举报
楼主您好~帖子长时间未作出回答,我已经将您的帖子改成已解决。如果有问题的话可以私密我哦~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马