標籤:
多態性帶來了一個問題,就是如何判斷一個變數所實際引用的對象的類型 。 C++使用runtime-type information(RTTI),Java 使用 instanceof 操作符。
instanceof 運算子用來判斷一個變數所引用的對象的實際類型,注意是它引用的對象的類型,不是變數的類型。請看下面的代碼:
1 public final class Demo{ 2 public static void main(String[] args) { 3 // 引用 People 類的執行個體 4 People obj = new People(); 5 if(obj instanceof Object){ 6 System.out.println("我是一個對象"); 7 } 8 if(obj instanceof People){ 9 System.out.println("我是人類");10 }11 if(obj instanceof Teacher){12 System.out.println("我是一名教師");13 }14 if(obj instanceof President){15 System.out.println("我是校長");16 }17 System.out.println("-----------"); // 分界線18 19 // 引用 Teacher 類的執行個體20 obj = new Teacher();21 if(obj instanceof Object){22 System.out.println("我是一個對象");23 }24 if(obj instanceof People){25 System.out.println("我是人類");26 }27 if(obj instanceof Teacher){28 System.out.println("我是一名教師");29 }30 if(obj instanceof President){31 System.out.println("我是校長");32 }33 }34 }35 class People{ }36 class Teacher extends People{ }37 class President extends Teacher{ }
運行結果:
我是一個對象
我是人類
-----------
我是一個對象
我是人類
我是一名教師
可以看出,如果變數引用的是當前類或它的子類的執行個體,instanceof 返回 true,否則返回 false。
系列文章:
Java知多少(1)語言概述
Java知多少(2)虛擬機器(JVM)以及跨平台原理
Java知多少(3) 就業方向
Java知多少(4)J2SE、J2EE、J2ME的區別
Java知多少(5) Java開發環境的搭建
Java知多少(6)第一個程式樣本
Java知多少(7)類與對象
Java知多少(8)類庫及其組織圖
Java知多少(9) import及Java類的搜尋路徑
Java知多少(10)資料類型及變數
Java知多少(11)資料類型轉換
Java知多少(12)運算子
Java知多少(13)流程式控制制
Java知多少(14)數組
Java知多少(15)字串
Java知多少(16)StringBuffer與StringBuider
Java知多少(17)強調一下編程風格
Java知多少(18)類的定義及其執行個體化
Java知多少(19)存取修飾詞(存取控制符)
Java知多少(20)變數的範圍
Java知多少(21)this關鍵字詳解
Java知多少(22)方法重載
Java知多少(23)類的基本運行順序
Java知多少(24)封裝類、拆箱和裝箱詳解
Java知多少(25)再談Java包
Java知多少(26)源檔案的聲明規則
Java知多少(27)繼承的概念與實現
Java知多少(28)super關鍵字
Java知多少(29)覆蓋和重載
Java知多少(30)多態和動態綁定
Java知多少(31)static關鍵字以及Java靜態變數和靜態方法
Java知多少(32)instanceof
Java知多少(32)instanceof