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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 651012160 中级黑马   /  2013-12-22 13:18  /  1194 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 651012160 于 2013-12-23 08:08 编辑

请问下列代码执行后的结果是什么?并给我解释一下原理!谢谢{:soso__3110130392203091378_3:}

父类:
package test;
public class FatherClass {
    public FatherClass()
    {
      System.out.println("FatherClass Create");
    }
}
子类:
package test;
import test.FatherClass;
public class ChildClass extends FatherClass {
    public ChildClass()
   {
    System.out.println("ChildClass Create");
   }
    public static void main(String[] args)
   {
    FatherClass fc = new FatherClass();     ChildClass cc = new ChildClass();
   }
}

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 淡定

查看全部评分

3 个回复

正序浏览
天天学习 发表于 2013-12-22 19:34
1,执行FatherClass fc = new FatherClass(),打印:
FatherClass Create
原因:对象一建立构造函数就运行 ...

这个对子类对象进行初始化时,为何父类的构造方法先运行?
回复 使用道具 举报
1,执行FatherClass fc = new FatherClass(),打印:
FatherClass Create
原因:对象一建立构造函数就运行,并为对象初始化,因此当建立对象fc时,FatherClass 类的构造函数就运行,执行打印语句 System.out.println("FatherClass Create")
2,执行 ChildClass cc = new ChildClass(),打印:
FatherClass Create
ChildClass Create
原因:执行ChildClass cc = new ChildClass()时,建立子类对象,进行初始化,在对子类进行初始化时,父类的构造函数先运行,当父类初始化完后,子类进行初始化。这是因为子类的构造函数默认第一行有一条隐示的语句super(),super()会访问父类中空参数的构造函数,而且子类所有构造函数默认第一行都是super(),因此当建立 cc 时,进行初始化顺序为先运行父类构造函数打印FatherClass Create,接着子类构造函数初始化,打印ChildClass Create

因此打印结果为:
FatherClass Create
FatherClass Create
ChildClass Create

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 很给力!

查看全部评分

回复 使用道具 举报
  1. FatherClass fc = new FatherClass();     ChildClass cc = new ChildClass();
复制代码


父类,子类函数分别建立一个对象,然后什么都不调用。怎么运行?
另外父类中只有构造方法,子类继承父类后重写了自己的构造方法那么继承就没有什么意义了。                                                                                                                                                                                                                                                                                    

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 赞一个!

查看全部评分

回复 使用道具 举报 1 0
您需要登录后才可以回帖 登录 | 加入黑马