Java語言的多態性機制導致了引用變量的聲明類型和其實際引用對象的類型可能不一致,再結合虛方法調用規則可以得出下述結論:聲明爲同種類型的兩個引用變量調用同一個方法時也可能會有不同的行爲(前面的虛方法調用)。
爲更準確地鑑別一個對象的真正類型,Java語言引入了instanceof操作符,其使用格式爲:
<引用類型變量> instanceof <引用類型>
這是一個boolean類型的表達式,當instanceof左側的引用類型變量所引用對象的實際類型是其右側給出的類型或其子類類型時,整個表達式的結果爲true,否則爲false。
我們來看一個例子,請看下面這些類的關係:類Student和Teacher派生自Person:
public class Person{
… …
}
public class Student extends Person{
… …
}
public class Teacher extends Person{
… …
}
現在有一個方法,接收一個Person類型參數,然後再在運行時根據傳入的參數類型來做不同的操作,此時,就可以用instanceof來對輸入的參數作判斷:
public void methodA(Person p){
if(p instanceof Teacher)
{//statement 1}
if(p instanceof Student)
{//statement 2}
}