**向下轉型存在安全隐患,為了保證向下轉型安全性,通過instanceof關鍵字進行判斷某個執行個體是否是某個類的對象。**文法定義如下:
對象 instanceof 類
該對象傳回一個boolean類型,如果傳回值為true則表示執行個體是指定對象。
例子:觀察instanceof關鍵字使用1
class Person{
public void print(){
System.out.println("吃飯、睡覺、學習、工作...");
}
}
class Per extends Person{
public String fly(){
return "飛翔、";
}
public String wound(){
return "能打";
}
}
public class Lx {
public static void main(String[] args){
Person a=new Person();//不轉型
System.out.println(a instanceof Person);//輸出true
System.out.println(a instanceof Per);//輸出false
}
}
如果不采用向上轉型,那麼執行個體化後的這對象就是一個普通人person,即執行個體化對象a為普通人;
a instanceof Person:表示a是person普通人,//輸出true
a instanceof Per;表示a是per超人,//輸出false
例子:觀察instanceof關鍵字使用2
public static void main(String[] args){
Person a=new Per();//向上轉型
System.out.println(a instanceof Person);//true
System.out.println(a instanceof Per);//true
}
日後項目開發過程中,如果要進行向下轉型,先使用instanceof進行判斷。
例子:
class Person{
public void print(){
System.out.println("吃飯、睡覺、學習、工作...");
}
}
class Per extends Person{
public String fly(){
return "飛翔、";
}
public String wound(){
return "能打";
}
}
public static void main(String[] args){
Person a=new Per();//向上轉型
if(a instanceof Per){ //判斷是否已經向上轉型,即a是否為隐藏超人
Per b=(Per) a;
System.out.println(b.fly());
System.out.println(b.wound());
}
}
輸出結果:
飛翔
能打
向上轉型以後就表示執行個體化對象a是一個隐藏在普通人裡面的超人,除了具有自己作為person的屬性之外,還具有作為per的屬性。