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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郑义 中级黑马   /  2012-9-8 07:52  /  1084 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 郑义 于 2012-9-8 08:10 编辑
  1. class Parent
  2. {
  3. public Parent()
  4. {
  5. System.out.println("调用Parent的构造方法");
  6. this.show();
  7. }
  8. public void show(){
  9. System.out.println("调用Parent的show方法");
  10. }

  11. }

  12. class Child extends Parent
  13. {
  14. public Child()
  15. {
  16. System.out.println("调用Child的构造方法");
  17. }
  18. public void show()
  19. {
  20. System.out.println("调用Child的show方法");
  21. }
  22. }

  23. public class Test
  24. {
  25. public static void main(String[] args)
  26. {
  27. Parent parent = new Child();
  28. System.out.println("------------------------");
  29. parent.show();
  30. }
  31. }
复制代码
其运行结果是这样的:

我想知道为什么会先调用Parent的构造函数然后再调用Parent的构造函数呢?
我以前一直认为是只调用Child的构造函数。这对我是一个盲点,今天才发现。

2 个回复

倒序浏览
class Parent
{
public Parent()
{
System.out.println("调用Parent的构造方法");
this.show();
}
public void show(){
System.out.println("调用Parent的show方法");
}

}

class Child extends Parent
{
public Child()
{
//super();
System.out.println("调用Child的构造方法");
}
public void show()
{
System.out.println("调用Child的show方法");
}
}

public class Test
{
public static void main(String[] args)
{
Parent parent = new Child();
System.out.println("------------------------");
parent.show();
}
}
派生类通过new构造方法创建对象,在调用构造方法时,默认执行的第一行是super();即调用父类的无参构造方法。
如果父类没有无参构造方法,系统会调用父类的默认无参构造方法(也就是一个方法体为空的无参构造方法);如果父类存在有参的构造方法同时没有无参构造方法,子类的构造方法就不能调用父类无参构造方法,表现就是编译不能通过了。你的代码中3掉用构造方法时,默认执行的第一行是super(),所以出现这种情况
希望对你有所帮助。
回复 使用道具 举报
邱成 发表于 2012-9-8 08:03
class Parent
{
public Parent()

对对对,忘了。基础不牢固啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马