zoukankan      html  css  js  c++  java
  • 继承(三):子父继承中构造函数的执行顺序

    /*
    1,Zi类进堆后,先初始化num为0,
    2,紧接着执行super语句,跳转到父类构造函数处
    3,父类构造函数中有show()函数,但是它会先在子类中寻找此函数,发现子类中有这个函数,则执行子类中的show()函数。此时num仍然为0
    4,接着super语句完成,继续回到子类构造函数中执行接下来的语句。num初始化为9,并执行下面的输出语句
    */
    1
    class Fu 2 { 3 Fu() 4 { 5 show(); 6 } 7 8 void show() 9 { 10 Sop("Fu show");//父类中的输出 11 } 12 13 } 14 15 class Zi extends Fu 16 { 17   int num = 9; 18 19   Zi() 20   { 21     //super();隐性,是父类索引,必须放在构造函数第一行,意味先执行父类初始化,再执行子类初始化,这样可以让子类初始化不被父类覆盖 22     Sop("Zi show..."+num); 23   } 24 25   void show() 26   { 27     Sop("show..."+num); 28   } 29 30 } 31 32 /* 33 34 show...0 35 Zi show...9 36 37 */

    2、构造代码块

    /*
    构造代码块先于构造函数执行
    */

    1
    class Zi 2 { 3 int num = 9; 4 5 { 6 Sop("constructor code ..."+num); 7 } 8 Zi() 9 { 10 Sop("Zi constructor..."+num); 11 } 12 13 } 14 /* 15 constructor code ...9 16 Zi constructor ...9 17 */

    3、子父类中的构造代码块、构造函数的执行顺序

    super()(show()函数的调用参照上一条)→显示初始化→构造代码块(如有赋值操作则再次赋值)→构造函数(完成Zi类中super后剩余的部分)

    class Fu
    {
        Fu()
        {
            show();
        }
        void show()
        {
            Sop("Fu show");
        }
    }
    class Zi
    {
        int num = 9;
        
        { 
            Sop("constructor code ..."+num);
            num = 10;//给num重新赋值
        }
        
        Zi()
        {
            //super();
            Sop("Zi constructor ..."+num);
        }
    
        void show()
        {
            Sop("Zi show..."+num);
        }
    }
    
    /*
    show...0
    constructor code ...9
    Zi constructor ... 10
    */
  • 相关阅读:
    如何解决列表框控件宽度不够的问题
    在windows Forms程序里面实现文件上传
    TFS的一些信息
    百钱百鸡问题
    如何移动SQL SERVER的系统数据库
    数据分页技术
    如何在报表中直接使用数据库中存储的图片
    重新注册MSJetOledb 4.0引擎
    2007 Microsoft Office Servers 已知问题/自述文件
    使用For XML与XSL(XSLT)配套快速输出查询结果到Web页面
  • 原文地址:https://www.cnblogs.com/sjbas/p/5355715.html
Copyright © 2011-2022 走看看