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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 林其荣 中级黑马   /  2013-1-10 15:36  /  1817 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 林其荣 于 2013-1-10 23:31 编辑

在继承的时候,类中只有默认的构造函数,在创建子类的时候有什么办法能证明子类是否调用了父类的构造函数

点评

在父类构造函数中添加一条输出语句就行了。建议你去看老师视频中的继承部分  发表于 2013-1-10 15:41

6 个回复

倒序浏览
你说的是super()吧,那么看下边代码
  1. class Test
  2. {
  3.         Test()
  4.         {
  5.                 System.out.println("Test");
  6.         }
  7. }
  8. class Demo extends Test
  9. {
  10.         Demo()
  11.         {
  12.                 //super();
  13.                 System.out.println("Demo");
  14.         }
  15.         public static void main(String[] args)
  16.         {
  17.                 new Demo();
  18.                 new Test();
  19.         }
  20. }
复制代码
结果是Test,Demo,Test,
运行过程:new一个Demo后他没打印Demo,而是执行了super(),也就是先执行父类的空构造函数
然后才打印自己的Demo,这里不管你写不写super(),结果都一样。
所以证明了子类调用了父类的构造函数

评分

参与人数 2技术分 +1 黑马币 +15 收起 理由
邓艳秋 + 1
舒远 + 15 鼓励一个!

查看全部评分

回复 使用道具 举报
本帖最后由 胡勇敏 于 2013-1-10 15:44 编辑

  1. <P>class Fater
  2. {
  3. Fater()
  4. {
  5. System.out.println("这是父类的构造函数打印。");
  6. }
  7. }

  8. class Child extends Fater
  9. {

  10. }

  11. class Test
  12. {
  13. public static void main(String[] args)
  14. {
  15. new Child();
  16. }
  17. }
  18. </P>
复制代码
打印结果就可以看出子类有没有调用父类的构造函数了。

回复 使用道具 举报
黑马王振宇 发表于 2013-1-10 15:41
你说的是super()吧,那么看下边代码结果是Test,Demo,Test,
运行过程:new一个Demo后他没打印Demo,而是 ...

父类中只有默认的构造方法没有定义的
回复 使用道具 举报
黑马王振宇 发表于 2013-1-10 15:41
你说的是super()吧,那么看下边代码结果是Test,Demo,Test,
运行过程:new一个Demo后他没打印Demo,而是 ...

父类只有默认的构造方法
例如
class A{}
class B extends A{}
class C extends B{}
回复 使用道具 举报
本帖最后由 黑马王振宇 于 2013-1-10 15:49 编辑
林其荣 发表于 2013-1-10 15:44
父类中只有默认的构造方法没有定义的


默认的构造方法为空你不定义没法看效果啊。
回复 使用道具 举报
林其荣 发表于 2013-1-10 15:46
父类只有默认的构造方法
例如
class A{}

如果父类只有默认的空的构造函数,那么子类调不调用都没有任何意义啊。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马