instanceof
Java提供了instanceof作為判別類別間繼承關係之用,如果要判定的物件為該類別或該類別的子類別則傳回true,否則傳回false。需特別注意的是,物件與類別間要有繼承關係,否則會有compile error,如錯誤狀況1、2。
在Java裡有個特別規定,就是任何陣列都繼承Object,所以類別陣列將繼承Object和Object[],一般型別陣列則會繼承Object,但是一般型別不是物件,所以一般型別陣列不會繼承Object[]。
範例程式:
class myBase1 { }
class myBase2 extends myBase1 { }
public class myInstanceof extends myBase2 {
public static void main(String[] args) {
myBase1 b1 = new myBase1();
myBase2 b2 = new myBase2();
myInstanceof i1 = new myInstanceof();
if (i1 instanceof myBase1) {
System.out.println("i1是myBase1的後代");
}
else {
System.out.println("i1不是myBase1的後代");
}
if (b1 instanceof myInstanceof) {
System.out.println("b1是myInstanceof的後代");
}
else {
System.out.println("b1不是myInstanceof的後代");
}
if (null instanceof myBase1) {
System.out.println("null是myBase1的後代");
}
else {
System.out.println("null不是myBase1的後代");
}
myBase2[] b2array = new myBase2[10];
if (b2array instanceof Object) {
System.out.println("b2array是Object的後代");
}
else {
System.out.println("b2array不是Object的後代");
}
if (b2array instanceof Object[]) {
System.out.println("b2array是Object[]的後代");
}
else {
System.out.println("b2array不是Object[]的後代");
}
int[] i = new int[10];
if (i instanceof Object) {
System.out.println("i是Object的後代");
}
else {
System.out.println("i不是Object的後代");
}
/*
//錯誤狀況1
if (i instanceof Object[]) {
System.out.println("i是Object[]的後代");
}
else {
System.out.println("i不是Object[]的後代");
}
//錯誤狀況2
Long lng = new Long(10);
if (lng instanceof String) {
System.out.println("lng是String的後代");
}
else {
System.out.println("lng不是String的後代");
}
*/
}
}
執行結果:
i1是myBase1的後代
b1不是myInstanceof的後代
null不是myBase1的後代
b2array是Object的後代
b2array是Object[]的後代
i是Object的後代
錯誤狀況1:
"myInstanceof.java": Error #: 365 : cannot compare int[] with java.lang.Object[]
錯誤狀況2:
"myInstanceof.java": Error #: 365 : cannot compare java.lang.Long with java.lang.String