public class Parent
          {
           public void test()
           {}
           
           public Parent()
           {
            test();
           }

           public static void main(String [] args)
           {
            new Child();
           }
          }

          class Child extends Parent
          {
           private int instanceValue = 20;
           public void test()
           {
               System.out.println("instance value is: " + instanceValue);
           }
          }

          執(zhí)行Parent的main結(jié)果是什么,并說(shuō)出理由


          instance value is:0

          答案是對(duì)的,我想知道為什么?

          posted on 2007-04-12 23:30 -274°C 閱讀(712) 評(píng)論(4)  編輯  收藏 所屬分類: JAVA


          FeedBack:
          # re: 群里看到個(gè)問(wèn)題
          2007-04-13 09:05 | 五大郎
          我試著分析下哦:

          很顯然,程序是從Main開(kāi)始執(zhí)行的,不過(guò)執(zhí)行之前肯定是裝載了Parent類的.
          當(dāng)執(zhí)行new Child();語(yǔ)句時(shí),肯定也會(huì)去裝載Child類(記住,這是只是裝載,裝載的同時(shí)會(huì)完成類的靜態(tài)成員的初始化工作).這里是請(qǐng)求創(chuàng)建Child的實(shí)例,因?yàn)镃hild是Parent的子類,那么肯定是要去先去創(chuàng)建Parent的一個(gè)實(shí)例的,那么在這個(gè)過(guò)程中,就會(huì)執(zhí)行了Child的覆蓋方法test(),這時(shí),子類中的instanceValue還沒(méi)有被賦值.因?yàn)檫@時(shí)候還沒(méi)有進(jìn)行Child的實(shí)例創(chuàng)建.
          看一下我加入一些狀態(tài)的程序和執(zhí)行結(jié)果哦.
          程序清單:
          public class Parent
          {
          public void test() {
          System.out.println("In Parent Class.");
          }

          public Parent() {
          System.out.println("In Parent Constructor");
          test();
          }

          public static void main(String [] args) {
          System.out.println("In Main Function.");
          new Child();
          }
          }

          class Child extends Parent {
          private int instanceValue = 20;

          public void test() {
          System.out.println("In Child Class.");
          System.out.println("instance value is: " + this.instanceValue);
          }

          public Child() {
          System.out.println("In Child Constructor.");
          }
          }
          執(zhí)行結(jié)果(主要是看執(zhí)行順序哦):
          In Main Function.
          In Parent Constructor
          In Child Class.
          instance value is: 0
          In Child Constructor.

          嘿嘿,應(yīng)該懂了吧!~ 你可以試著把instanceValue的修飾符改為static試試哦.
            回復(fù)  更多評(píng)論
            
          # re: 群里看到個(gè)問(wèn)題[未登錄](méi)
          2007-04-14 14:10 | αβγ
          # re: 群里看到個(gè)問(wèn)題
          2007-04-20 13:37 | 我為J狂
          @五大郎
          受益匪淺,講得很透徹。  回復(fù)  更多評(píng)論
            
          # re: 群里看到個(gè)問(wèn)題
          2007-04-23 17:00 | ZelluX
          @五大郎
          贊!  回復(fù)  更多評(píng)論
            

          常用鏈接

          留言簿(21)

          隨筆分類(265)

          隨筆檔案(242)

          相冊(cè)

          JAVA網(wǎng)站

          關(guān)注的Blog

          搜索

          •  

          積分與排名

          • 積分 - 915006
          • 排名 - 40

          最新評(píng)論

          主站蜘蛛池模板: 丰顺县| 龙口市| 乌苏市| 马边| 石渠县| 洛隆县| 成安县| 河曲县| 徐水县| 温宿县| 东方市| 凤台县| 山西省| 乌拉特中旗| 修武县| 湖州市| 西和县| 东安县| 凤庆县| 建湖县| 桐柏县| 定结县| 屏边| 团风县| 棋牌| 临海市| 云和县| 澄迈县| 错那县| 且末县| 左云县| 霍林郭勒市| 汕尾市| 从化市| 井研县| 松溪县| 天台县| 隆化县| 泽库县| 宁津县| 阿巴嘎旗|