1. 程式人生 > >instanceof詳細用法

instanceof詳細用法

instanceof是Java的一個二元操作符,和==,>,<是同一類東西。由於它是由字母組成的,所以也是Java的保留關鍵字。它的作用是測試它左邊的物件是否是它右邊的類的例項,返回boolean型別的資料。可以用在繼承中的子類的例項是否為父類的實現。相當於c#中的is操作符。

示例

  舉個例子:

  String s = "I AM an Object!";

  booleanisObject = s instanceof Object;

  我們聲明瞭一個String物件引用,指向一個String物件,然後用instanceof來測試它所指向的物件是否是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 instanceofPhoneBill) {

  //計算電話賬單

  }

  if (bill instanceofGasBill) {

  //計算燃氣賬單

  }

  ...

  }

  這樣就可以用一個方法處理兩種子類。

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

  public double calculate(PhoneBill bill) {

  //計算電話賬單

  }

  public double calculate(GasBill bill) {

  //計算燃氣賬單

  }

  所以,使用instanceof在絕大多數情況下並不是推薦的做法,應當好好利用多型。

  instanceof 一般情況下 用在物件型別的強制轉換 ,

  例如:

  繼承關係 class Manager extends Employee

  ----------------------------------------------------------

  public void doSomething(Employee e) {

  if ( e instanceof Manager){

  Manager m = (Manager) e ;

  }

  }

Super 超類 (Java程式語言)

  超類:用java術語來講,被繼承的類稱為超類,繼承的類稱為子類。

  面向物件程式設計的最重要的特色之一就是能夠使用以前建立的類的方法和域。通過簡單的類來建立功能強大的類,可以大幅地節省程式設計時間,更重要的是,這樣做可以減少程式碼出錯的機會。要在以前的類上構造新類,就必須在類宣告中擴充套件這個類。

  通過擴充套件一個超類,可以得到這個類的一個新副本,並且可以在其上新增其他功能。如果對這個新類並不做任何新增工作,那麼,它的工作情況與超類完全相同,新類中會含有超類所宣告和繼承的、具有訪問許可權的所有方法和域。

  對於超類,應該確切地理解this和super關鍵字的使用,下圖演示了這兩個關鍵字的使用。

  importjava.awt.*;

  public class TestThisSuper extends Frame

  {

  int b;

  publicTestThisSuper(String a)

  {

  this (a,0);

  }

  publicTestThisSuper(String a, int b)

  {

  super(a);

  this.b= b;

  }

  }