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

          執行Parent的main結果是什么,并說出理由


          instance value is:0

          答案是對的,我想知道為什么?

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


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

          很顯然,程序是從Main開始執行的,不過執行之前肯定是裝載了Parent類的.
          當執行new Child();語句時,肯定也會去裝載Child類(記住,這是只是裝載,裝載的同時會完成類的靜態成員的初始化工作).這里是請求創建Child的實例,因為Child是Parent的子類,那么肯定是要去先去創建Parent的一個實例的,那么在這個過程中,就會執行了Child的覆蓋方法test(),這時,子類中的instanceValue還沒有被賦值.因為這時候還沒有進行Child的實例創建.
          看一下我加入一些狀態的程序和執行結果哦.
          程序清單:
          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.");
          }
          }
          執行結果(主要是看執行順序哦):
          In Main Function.
          In Parent Constructor
          In Child Class.
          instance value is: 0
          In Child Constructor.

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

          常用鏈接

          留言簿(21)

          隨筆分類(265)

          隨筆檔案(242)

          相冊

          JAVA網站

          關注的Blog

          搜索

          •  

          積分與排名

          • 積分 - 914107
          • 排名 - 40

          最新評論

          主站蜘蛛池模板: 信丰县| 勃利县| 寻甸| 威海市| 荥经县| 永兴县| 瓦房店市| 阿瓦提县| 沽源县| 垫江县| 巴彦淖尔市| 米林县| 藁城市| 平湖市| 德阳市| 尖扎县| 垣曲县| 浦城县| 罗定市| 云梦县| 巩义市| 文成县| 宁波市| 新绛县| 广南县| 池州市| 西乌珠穆沁旗| 连云港市| 军事| 邓州市| 额尔古纳市| 云林县| 白玉县| 张家港市| 青海省| 沂南县| 岑溪市| 斗六市| 石楼县| 夏邑县| 海南省|