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