Sealyu

          --- 博客已遷移至: http://www.sealyu.com/blog

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            618 隨筆 :: 87 文章 :: 225 評論 :: 0 Trackbacks
          <2009年12月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          常用鏈接

          留言簿(14)

          隨筆分類

          隨筆檔案

          友情鏈接

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          用這題目吸引大家注意,請見諒!
          以下代碼有些朋友可能會似曾熟識,可能也算不上“原創”,請見諒!
          不過,我出的這題,確定有點意思,考考大家。
          /**
           * 父類
           * 
          @author rongxinhua
           *
           
          */
          public class Father{
              
          private String name="FATHER";
              
          public Father(){
                  whoAmI();
                  tellName(name);
              }
              
          public void whoAmI(){
                  System.out.println(
          "Father says, I am " + name);
              }
              
          public void tellName(String name){
                  System.out.println(
          "Father's name is " + name);
              }
          }

          /**
           * 子類
           * 
          @author rongxinhua
           *
           
          */
          public class Son extends Father{
              
          private String name="SON";
              
          public Son(){
                  whoAmI();
                  tellName(name);
              }
              
          public void whoAmI(){
                  System.out.println(
          "Son says, I am " + name);
              }
              
          public void tellName(String name){
                  System.out.println(
          "Son's name is " + name);
              }
          }

          問題:當執行 Father who = new Son(); 時,會輸出什么?
          如果你去參加一個公司的筆試或面試時問了這么一道題,在沒有環境測試的情況下,你會猜測什么答案?

          這個題目其實是一個小Trick,要注意whoAmI和tellName函數的區別:一個是打印field的值,而另一個是打印參數。
          其實過程是這樣的:
          1. 創建Son的時候先創建Father,而Father中的whoAmI是已經被Son覆蓋了,因此這里打印的name這個field是Son中的 field,而此時還沒有構造Son,因此Son中的name的值是null(這里即使是寫了String name = "SON"也是沒有用的,因為父類沒有構造結束之前,這里是不會被執行的)。
          2.Father在執行tellName的時候,傳遞的參數name是Father自身的name這個field值,這個值是已經被賦值為"FATHER"的,因此會打印出“Son's name is FATHER”
          3.Father構造完畢后開始構造Son,這里的打印結果就可以按照常規方式來解釋了。
          posted on 2009-12-09 15:36 seal 閱讀(344) 評論(2)  編輯  收藏 所屬分類: Java基礎

          評論

          # re: 一道Java筆試面試題(轉)[未登錄] 2009-12-09 16:39 andy
          very good!:-)  回復  更多評論
            

          # re: 一道Java筆試面試題(轉) 2009-12-09 20:37 老運
          太神奇了  回復  更多評論
            

          主站蜘蛛池模板: 乌拉特中旗| 略阳县| 曲沃县| 白玉县| 昌江| 信丰县| 闽侯县| 彭水| 莱州市| 巧家县| 安达市| 噶尔县| 刚察县| 吉木萨尔县| 岢岚县| 定襄县| 合川市| 家居| 石河子市| 新宾| 南雄市| 汉川市| 松阳县| 军事| 长葛市| 壶关县| 静宁县| 吉安市| 葵青区| 蚌埠市| 历史| 虎林市| 仁化县| 望都县| 绥阳县| 襄汾县| 石家庄市| 溧水县| 通州市| 泉州市| 濮阳县|