黑马程序员技术交流社区

标题: 继承时构造函数问题 [打印本页]

作者: 林其荣    时间: 2013-1-10 15:36
标题: 继承时构造函数问题
本帖最后由 林其荣 于 2013-1-10 23:31 编辑

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

作者: 黑马王振宇    时间: 2013-1-10 15:41
你说的是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(),结果都一样。
所以证明了子类调用了父类的构造函数

作者: 胡勇敏    时间: 2013-1-10 15:42
本帖最后由 胡勇敏 于 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:44
黑马王振宇 发表于 2013-1-10 15:41
你说的是super()吧,那么看下边代码结果是Test,Demo,Test,
运行过程:new一个Demo后他没打印Demo,而是 ...

父类中只有默认的构造方法没有定义的
作者: 林其荣    时间: 2013-1-10 15:46
黑马王振宇 发表于 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:48
本帖最后由 黑马王振宇 于 2013-1-10 15:49 编辑
林其荣 发表于 2013-1-10 15:44
父类中只有默认的构造方法没有定义的


默认的构造方法为空你不定义没法看效果啊。
作者: 胡勇敏    时间: 2013-1-10 15:54
林其荣 发表于 2013-1-10 15:46
父类只有默认的构造方法
例如
class A{}

如果父类只有默认的空的构造函数,那么子类调不调用都没有任何意义啊。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2