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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 黑马王晓明 于 2013-7-27 00:07 编辑
  1. <package test;

  2. class Fu
  3. {
  4.         
  5.         Fu(int x){
  6.           super();
  7.           System.out.println("fu...run");
  8.         }
  9. }
  10. class Zi extends Fu
  11. {
  12.         Zi(){
  13.         this(4);
  14.             System.out.println("zi...run");
  15.         }
  16.         Zi(int y){
  17.                 this(3,4);
  18.                 System.out.println("zi...run.......y");
  19.         }
  20.         Zi(int z,int a){
  21.            super(1111);
  22.            System.out.println("zi...run.......z");
  23.         }
  24. }
  25. class ExtendsDemo
  26. {
  27.         public static void main(String[] args)
  28.         {
  29.                 new Zi();
  30.         }
  31. }
  32. >
复制代码
运行结果:fu...runzi...run.......z
zi...run.......y
zi...run
它们的执行顺序是什么样的,还有其中包含了哪些知识点,越详细越好,请教啊 指点啊 谢谢啊


评分

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

查看全部评分

2 个回复

倒序浏览
本帖最后由 py强子 于 2013-7-26 23:56 编辑

子父类构造函数的特点:
1.在对子类对象进行初始化时,父类的构造函数也会运行。
2.那是因为子类的构造函数默认第一行有一条隐式的语句super();
3.Super():会访问父类中空参数的构造函数,而且子类中所有的构造函数默认第一行都是super();
为什么子类一定要访问父类的构造函数?
因为父类中的数据,子类可以直接获取,所以子类对象在建立时,需要先查看父类是如何对这些数据进行初始化的,
所以子类在对象初始化时,要先访问一下父类中的构造函数,
如果要访问父类中指定的构造函数,可以通过手动定义super语句的方式来指定。
子类中至少会有一个构造函数访问父类中的构造函数。
例子:
class Fu
{
   int num = 2;
   Fu()
   {
      System.out.println("fu");
   }
}
class Zi extends Fu
{
   Zi()
   {
     //super();
     System.out.println("zi");
   }
   Zi(int x)
   {
      //super();
     System.out.println("zi"+x);
   }
}
class ExtendsDemo3
{
  public static void main(String[] args)
  {
    Zi z = new Zi();
    Zi z1 = new Zi(4);
   
  }
}

评分

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

查看全部评分

回复 使用道具 举报
非常感谢啊  现在我已经恍然大悟了  “理解”万岁啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马