標籤:
多態性帶來了一個問題,就是如何判斷一個變數所實際引用的對象的類型 。 C++使用runtime-type information(RTTI),Java 使用 instanceof 操作符。
instanceof 運算子用來判斷一個變數所引用的對象的實際類型,注意是它引用的對象的類型,不是變數的類型。請看下面的代碼:
- public final class Demo{
- public static void main(String[] args) {
- // 引用 People 類的執行個體
- People obj = new People();
- if(obj instanceof Object){
- System.out.println("我是一個對象");
- }
- if(obj instanceof People){
- System.out.println("我是人類");
- }
- if(obj instanceof Teacher){
- System.out.println("我是一名教師");
- }
- if(obj instanceof President){
- System.out.println("我是校長");
- }
- System.out.println("-----------"); // 分界線
-
- // 引用 Teacher 類的執行個體
- obj = new Teacher();
- if(obj instanceof Object){
- System.out.println("我是一個對象");
- }
- if(obj instanceof People){
- System.out.println("我是人類");
- }
- if(obj instanceof Teacher){
- System.out.println("我是一名教師");
- }
- if(obj instanceof President){
- System.out.println("我是校長");
- }
- }
- }
- class People{ }
- class Teacher extends People{ }
- class President extends Teacher{ }
運行結果:
我是一個對象
我是人類
-----------
我是一個對象
我是人類
我是一名教師
可以看出,如果變數引用的是當前類或它的子類的執行個體,instanceof 返回 true,否則返回 false。
7.Java instanceof 運算子