Sealyu

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

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            618 隨筆 :: 87 文章 :: 225 評論 :: 0 Trackbacks
          用這題目吸引大家注意,請見諒!
          以下代碼有些朋友可能會似曾熟識,可能也算不上“原創”,請見諒!
          不過,我出的這題,確定有點意思,考考大家。
          /**
           * 父類
           * 
          @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 閱讀(339) 評論(2)  編輯  收藏 所屬分類: Java基礎

          評論

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

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

          主站蜘蛛池模板: 鄂托克前旗| 亳州市| 潮安县| 阿鲁科尔沁旗| 龙游县| 治多县| 安达市| 彰化市| 潞城市| 栖霞市| 扎囊县| 健康| 枞阳县| 上高县| 青田县| 扎鲁特旗| 勃利县| 沿河| 八宿县| 阳东县| 长兴县| 永昌县| 绵竹市| 含山县| 普安县| 平度市| 宜良县| 湖州市| 余庆县| 铜山县| 桐梓县| 三都| 木兰县| 阳春市| 民勤县| 临城县| 凉城县| 寿光市| 德化县| 栾川县| 海阳市|