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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 冯敏 黑马帝   /  2011-11-25 19:23  /  2591 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 冯敏 于 2011-11-27 13:16 编辑

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();

}
}
结果是什么啊,请详细解释一下执行过程

3 个回复

倒序浏览
FatherClass Create
FatherClass Create
ChildClass Create
解释:声明父类对象的时候执行一次父类的构造方法;
      声明子类对象的时候先调用父类的构造方法然后再调用自己的构造方法。
所以会出现上面的情况。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
继承时候类的执行顺序问题,构造函数初始化顺序。虽然听过,看过不少相关资料,但今天一开始还是没弄明白,只好拿到程序里面运行一下才确定:初始的时候先初始化继承的构造函数,再调用自己的构造函数。

下面是运行的程序

package test;

public class FatherClass {
    public FatherClass()
    {
     System.out.println("FatherClass Create");
    }
}
------------

package test;

public class ChildClass extends FatherClass {
public ChildClass()
{
   System.out.println("ChildClass Create");
}
public static void main(String[] args)
{
   FatherClass fc = new FatherClass();//这句输出FatherClass Create 就初始化调用构造函数
   ChildClass cc = new ChildClass();//这句输出FatherClass Create ChildClass Create
   //即初始的时候先初始化继承的构造函数,再调用自己的构造函数
}
}
-----------------

输出结果:

FatherClass Create
FatherClass Create
ChildClass Create

-----------------

研究方法:先注释掉ChildClass cc = new ChildClass();这句只输出FatherClass Create,说明创建子类对象的时候输出了两句,而且是先输出父类构造函数里面的再输出子类构造函数里面的,所以执行顺序是先父类后子类。

评分

参与人数 1技术分 +2 收起 理由
admin + 2

查看全部评分

回复 使用道具 举报
大家想一下,这种方式 打印出来的又是什么呢?是不是会一直先调用父类的构造方法呢?
  1. class GrandFather
  2. {

  3.         public GrandFather() {
  4.                 System.out.println("Grandfather create");
  5.         }
  6.        
  7. }

  8. public class FatherClass extends GrandFather
  9. {
  10.         public FatherClass()
  11.         {
  12.         System.out.println("FatherClass Create");
  13.         }
  14. }
  15. //子类:

  16. class ChildClass extends FatherClass
  17. {
  18.         public ChildClass()
  19.         {
  20.          System.out.println("ChildClass Create");
  21.         }
  22.         public static void main(String[] args)
  23.         {
  24.         FatherClass fc = new FatherClass();
  25.         ChildClass cc = new ChildClass();
  26.         }
  27. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

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