零全零美(www.zzgwt.com)
          生活中的很多事情,并不像If...Else那么簡單!
          posts - 96,comments - 52,trackbacks - 0
          instanceof是Java的一個二元操作符,和==,>,<是同一類東東。由于它是由字母組成的,所以也是Java的保留關鍵字。它的作用是測試它左邊的對象是否是它右邊的類的實例,返回boolean類型的數據。舉個例子:

          String s = "I AM an Object!";
          boolean isObject = s instanceof Object;

          我們聲明了一個String對象引用,指向一個String對象,然后用instancof來測試它所指向的對象是否是Object類的一個實例,顯然,這是真的,所以返回true,也就是isObject的值為True。
          instanceof有一些用處。比如我們寫了一個處理賬單的系統,其中有這樣三個類:

          public class Bill {//省略細節}
          public class PhoneBill extends Bill {//省略細節}
          public class GasBill extends Bill {//省略細節}

          在處理程序里有一個方法,接受一個Bill類型的對象,計算金額。假設兩種賬單計算方法不同,而傳入的Bill對象可能是兩種中的任何一種,所以要用instanceof來判斷:

          public double calculate(Bill bill) {
          if (bill instanceof PhoneBill) {
          //計算電話賬單
          }
          if (bill instanceof GasBill) {
          //計算燃氣賬單
          }
          ...
          }
          這樣就可以用一個方法處理兩種子類。

          然而,這種做法通常被認為是沒有好好利用面向對象中的多態性。其實上面的功能要求用方法重載完全可以實現,這是面向對象變成應有的做法,避免回到結構化編程模式。只要提供兩個名字和返回值都相同,接受參數類型不同的方法就可以了:

          public double calculate(PhoneBill bill) {
          //計算電話賬單
          }

          public double calculate(GasBill bill) {
          //計算燃氣賬單
          }

          所以,使用instanceof在絕大多數情況下并不是推薦的做法,應當好好利用多態。
          posted on 2008-05-31 09:19 零全零美 閱讀(186) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 怀集县| 屯留县| 和田市| 巴里| 华池县| 米脂县| 南溪县| 宿松县| 驻马店市| 缙云县| 筠连县| 微山县| 英德市| 南康市| 铜陵市| 盖州市| 平舆县| 锡林郭勒盟| 云霄县| 青田县| 璧山县| 普陀区| 大化| 连南| 阳西县| 古浪县| 包头市| 文昌市| 保定市| 敖汉旗| 云和县| 启东市| 鲜城| 隆尧县| 阜宁县| 柳林县| 兴义市| 石林| 乐陵市| 义马市| 吉隆县|