//instanceof是判斷左側對象是不是右側類的實例
package
myPackage;
/**
* instanceof運算符用法
* 運算符是雙目運算符,左面的操作元是一個對象,右面是一個類.當
* 左面的對象是右面的類創建的對象時,該運算符運算的結果是true,否則是false
*
* 說明:(1)一個類的實例包括本身的實例,以及所有直接或間接子類的實例
* (2)instanceof左邊操作元顯式聲明的類型與右邊操作元必須是同種類或右邊是左邊父類的繼承關系,
* (3)不同的繼承關系下,編譯出錯
*/
class
Person {
}
class
Student
extends
Person {
}
class
Postgraduate
extends
Student {
}
class
Animal {
}
public
class
Ex_instanceOf {
public
static
void
main(String[] args) {
instanceofTest(
new
Student());
}
/**
* 這個程序的輸出結果是:p是類Student的實例
*
* Person類所在的繼承樹是:Object<--Person<--Student<--Postgraduate。
*
* 這個例子中還加入一個Animal類,它不是在Person類的繼承樹中,所以不能作為instanceof的右操作數。
*
* @param p
*/
public
static
void
instanceofTest(Person p) {
// p 和 Animal類型不一樣,彼此之間沒有繼承關系,編譯會出錯
// 提示錯誤:Incompatible conditional operand types Person and Animal
// if(p instanceof Animal){
// System.out.println("p是類Animal的實例");
// }
//下面代碼的除了第一行都會輸出
if
(p
instanceof
Postgraduate) System.out.println(
"p是類Postgraduate的實例"
);
if
(p
instanceof
Person) System.out.println(
"p是類Person的實例"
);
if
(p
instanceof
Student) System.out.println(
"p是類Student的實例"
);
if
(p
instanceof
Object) System.out.println(
"p是類Object的實例"
);
}
}