Dict.CN 在線詞典, 英語學習, 在線翻譯

          都市淘沙者

          荔枝FM Everyone can be host

          統計

          留言簿(23)

          積分與排名

          優秀學習網站

          友情連接

          閱讀排行榜

          評論排行榜

          深入理解Java對象實例生成的例子

          class A { 
            public int Avar; 
            public A() { 
             System.out.println("AAA"); 
             doSomething(); 
            } 
          
            public void doSomething() { 
             Avar = 1111; 
             System.out.println("A.doSomething()"); 
            } 
          } 
          
          public class B extends A { 
            public int Bvar = 2222; 
            public B() { 
             System.out.println("BBB"); 
             doSomething(); 
             System.out.println("Avar=" + Avar); 
            } 
          
            public void doSomething() { 
              System.out.println("Bvar=" + Bvar); 
            } 
          
           public static void main(String[] args) { 
             new B(); 
           } 
          }
          
          講解:
          順序是這樣得,首先生成B就得先生成A(沒有父,哪來子)
          所以調用A的構造器,輸出AAA,
          然后調用方法dosomething,!!!
          注意:A的該方法被B覆蓋,
          而你生成的是B的對象,
          所以它調用B的方法,
          由于BVAR目前沒有給定值,
          所以自動初始化為0,
          然后生成B對象,
          先初始化變量BVAR,
          然后調用構造器輸出BBB,
          然后調用方法,
          這時BVAR已初始化,
          所以輸出BVAR=2222,
          而對象A中變量AVAR由于沒有調用對象A的方法dosomething,
          所以其值為0,則輸出0
          全部輸出就如下:


          ?????


          AAA
          Bvar=0
          BBB
          Bvar=2222
          Avar=0
          注意:初始化順序,當繼承時,先生成超類對象,生成對象時,先生成靜態變量,然后是一般變量,然后調用構造器!當所以超類對象生成后,生成本對象,順序一樣! 當方法被覆蓋時,調用目前對象的方法!這得注意。

          下面這個題目你能選對答案嗎?:

          What will happen when you attempt to compile and run the following code?
          
          class Base 
          {
              int i = 99;
              public void amethod()
              {
                  System.out.println("Base.amethod()");
              }
                  	
              Base()
              {
                  amethod();
              }
          }
          public class Derived extends Base
          {
              int i = -1;
                  
              public static void main(String argv[])
              {
                  Base b = new Derived();
                  System.out.println(b.i);
                  b.amethod();
              }
          	
              public void amethod()
              {
                  System.out.println("Derived.amethod()");
              }
          }
          
           A. Derived.amethod()
              -1
              Derived.amethod()
          
           B. Derived.amethod()
              99
              Derived.amethod()
          
          C. 99
              Derived.amethod()
          D.
              Compile time error
          

          posted on 2006-04-26 15:53 都市淘沙者 閱讀(250) 評論(1)  編輯  收藏 所屬分類: Java Basic/Lucene/開源資料

          評論

          # re: 深入理解Java對象實例生成的例子 2006-11-27 20:36 浪子

          好像是B吧,


          第一個例子好有收獲...  回復  更多評論   

          主站蜘蛛池模板: 巴里| 临城县| 湟源县| 亳州市| 洪湖市| 镶黄旗| 东方市| 云林县| 宜城市| 隆德县| 永修县| 三门峡市| 仲巴县| 运城市| 保定市| 佛教| 贡山| 盐池县| 合水县| 安宁市| 唐河县| 枞阳县| 镇江市| 康乐县| 禹州市| 龙井市| 亚东县| 会昌县| 神木县| 远安县| 苗栗市| 五莲县| 泰兴市| 中方县| 玉树县| 东阳市| 鹤壁市| 腾冲县| 改则县| 牟定县| 乌鲁木齐市|