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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wangleixhlm 中级黑马   /  2014-5-25 23:32  /  1685 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 wangleixhlm 于 2014-5-26 22:02 编辑
  1. class FatherClass
  2. {
  3.         public FatherClass()
  4.         {
  5.                 System.out.println("FatherClass Create");
  6.         }
  7. }

  8. public class ChildClass extends FatherClass
  9. {
  10.         public ChildClass()
  11.         {
  12.                 System.out.println("ChildClass Create");
  13.         }
  14.         public static void main(String[] args)
  15.         {
  16.                 FatherClass fc = new FatherClass();
  17.                 ChildClass cc = new ChildClass();
  18.         }
  19. }
复制代码



为什么会输出这个结果?两次FatherClass Create:
E:\My Document\test>java ChildClass
FatherClass Create
FatherClass Create
ChildClass Create

不科学啊。。

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

5 个回复

倒序浏览
就是太科学了,所以结果才是这样,比如动物是父类,狗是子类,你new了一个狗,能说没有多一个动物么!这是生活中的例子,所以子类的构造方法的第一行,有一句隐式的super(),所以结果就是你这个样子了

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 寻找人生目标 于 2014-5-25 23:44 编辑
  1. class FatherClass
  2. {
  3.         public FatherClass()
  4.         {
  5.                 System.out.println("FatherClass Create");
  6.         }
  7. }

  8. public class ChildClass extends FatherClass
  9. {
  10.         public ChildClass()
  11.         {
  12.                                 //super();    //隐士的super(); 指向父类的构造函数
  13.                 System.out.println("ChildClass Create");
  14.         }
  15.         public static void main(String[] args)
  16.         {
  17.                 FatherClass fc = new FatherClass(); //第一步父类的构造函数执行(父类还继承了Object但是它什么也没就没输出东西)输出一次
  18.                 ChildClass cc = new ChildClass(); //第二步子类的构造函数执行 其第一行有个隐士的super();执行父类的构造函数再输出一次
  19.         }
  20. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报
曹冬明 发表于 2014-5-25 23:39
就是太科学了,所以结果才是这样,比如动物是父类,狗是子类,你new了一个狗,能说没有多一个动物么!这是 ...

额,看来还真是挺科学的:handshake懂了
回复 使用道具 举报
  1. class FatherClass
  2. {
  3. public FatherClass()
  4. {
  5. System.out.println("FatherClass Create");
  6. }
  7. }

  8. public class ChildClass extends FatherClass
  9. {
  10. public ChildClass()
  11. {
  12. System.out.println("ChildClass Create");
  13. }
  14. public static void main(String[] args)
  15. {
  16. FatherClass fc = new FatherClass(); //输入FatherClass Create是毫无疑问的。
  17. ChildClass cc = new ChildClass(); //当创建对象输入FatherClass Create,然后输入ChildClass Create。
  18. }
  19. }
复制代码
当子类继承了父类的时候如果父类的方法子类没有去覆盖时,子类在创建对象的时候会自动的将父类中没有覆盖的方法继承过来。所以父类创建对象时输出的还是父类方法,而子类创建对象时不仅仅输出子类中的方法而且还要输出继承父类中的方法。
回复 使用道具 举报
是这样的,子类实例化,会调用父类的构造方法的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马