Java中的instanceof關鍵字

  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在絕大多數狀況下並非推薦的作法,應當好好利用多態。編程

相關文章
相關標籤/搜索