日本一本亚洲最大|日本午夜免费啪视频在|国产自产在线视频一区|亚洲福利精品视频

    <object id="4ihfc"></object>
      
      
    1. <object id="4ihfc"></object>
    2. 我要投稿 投訴建議

      攜程 Java 工程師的面向?qū)ο竺嬖囶}

      時(shí)間:2021-01-14 16:04:44 面試試題 我要投稿

      攜程 Java 工程師的面向?qū)ο竺嬖囶}

        這是伯樂(lè)在線小組的一個(gè)熱門(mén)討論帖

      攜程 Java 工程師的面向?qū)ο竺嬖囶}

        public class Base

        {

        private String baseName = "base";

        public Base()

        {

        callName();

        }

        public void callName()

        {

        System. out. println(baseName);

        }

        static class Sub extends Base

        {

        private String baseName = "sub";

        public void callName()

        {

        System. out. println (baseName) ;

        }

        }

        public static void main(String[] args)

        {

        Base b = new Sub();

        }

        }

        求這段程序的輸出。

        來(lái)自 未老莫還鄉(xiāng) 的評(píng)論:

        【不要在構(gòu)造器里調(diào)用可能被重載的虛方法,這是極度危險(xiǎn)的】。構(gòu)造器的初始化順序大概是 父類(lèi)靜態(tài)塊 子類(lèi)靜態(tài)塊 父類(lèi)初始化語(yǔ)句 父類(lèi)構(gòu)造函器 子類(lèi)初始化語(yǔ)句 子類(lèi)構(gòu)造器。父類(lèi)構(gòu)造器執(zhí)行的時(shí)候,調(diào)用了子類(lèi)的重載方法,然而子類(lèi)的類(lèi)字段還在剛初始化的階段,剛完成內(nèi)存布局,只能輸出null。

        來(lái)自 ihuning 的精華評(píng)論:

        看我大師歸來(lái):

        1. Base b = new Sub();

        2. Base b = 直接忽略,從 new Sub();開(kāi)始

        3. 類(lèi)加載器加載 Base,Sub 類(lèi)到j(luò)vm;

        4. 為Base,Sub 類(lèi)中的兩個(gè)屬性baseName 分配存儲(chǔ)空間,但是不初始化;

        注意:屬性的初始化時(shí)放在構(gòu)造器中,按照代碼順序執(zhí)行的。

        5. new Sub會(huì)調(diào)用Sub的無(wú)參構(gòu)造器,而在這個(gè)構(gòu)造器中會(huì)隱式調(diào)用父類(lèi)Base的.無(wú)參構(gòu)造器;

        6. 父類(lèi)Base的構(gòu)造器中代碼本質(zhì)是

        public Base()

        {

        baseName = "base";

        callName();

        }

        即父類(lèi)的屬性baseName 的值為base。但為何輸出null,騷年別急。

        7. 因?yàn)楦割?lèi)構(gòu)造器方法是在子類(lèi)中調(diào)用的,即大環(huán)境是子類(lèi)。此時(shí),調(diào)用的方法callName()當(dāng)然是指子類(lèi)的方法。而這個(gè)方法打印的屬性baseName當(dāng)然也是子類(lèi)的。那現(xiàn)在子類(lèi)的屬性baseName的值是多少呢?答案是null.因?yàn)榇藭r(shí)子類(lèi)Sub的構(gòu)造器內(nèi)代碼本質(zhì)是:

        super();

        baseName="sub";

        此時(shí)baseName="sub"還沒(méi)執(zhí)行。

        因此,左后的值當(dāng)然是null.

      【攜程 Java 工程師的面向?qū)ο竺嬖囶}】相關(guān)文章:

      java工程師面試題05-07

      Java軟件工程師綜合面試題06-05

      java面試題01-31

      java學(xué)習(xí):Java面試題和答案07-23

      Java面試題集07-19

      java基礎(chǔ)面試題02-26

      Java框架面試題07-09