java隨筆---instanceof

 向下轉型操作:將父類轉化爲某個子類。如:將Object類轉爲String類,再通俗講就是將四邊形轉爲平行四邊形。通常這樣的轉型會出錯,因爲四邊形不一定是平行四邊形,這時我們通常需要用instanceof先進行判斷。


    在程序執行向下轉型操作時,如果父類對象不是子類對象的實例,就會發生ClassCastExceptio異常。因此在執行向下轉型之前需要養成一個良好的習慣,就是判斷父類對象是否爲子類對象的實例,通常我們使用instanceof來完成。instanceof的語法格式如下:

  

        myobject instanceof ExampleClass
  

其中,myobject :某類的對象引用  ExampleClass : 某個類


示例:

  

class  Quarangle{
    public void  draw(Quarangle q){
        System.out.println("this is Quarangle");
    }
}

class Square extends  Quarangle{

}

class  Anything{

}

public class instanceofTest {

    public static void main(String[] args) {
        Quarangle quarangle=new Quarangle();
        Quarangle qu=new Square();
        Square sq=new Square();
        if(quarangle instanceof  Square){
            System.out.println("==========");
        }else {
            System.out.println("######");
        }

        if(sq instanceof  Quarangle){
            sq.draw(sq);
        }else {
            System.out.println("----");
        }

        if(qu instanceof  Square){
            System.out.println("*****");
        }else {
            System.out.println("&&&");
        }



//        if(quarangle instanceof  Anything){     //這條語句idea直接編譯沒通過,eclipse是否能通過可以去嘗試一下
//             Anything anything=(Anything) quarangle;
//        }

    }
}

運行結果:

<span style="color:#000000;">######
this is Quarangle
*****
</span>

結果分析:

  條件:Quarangle 是Square的父類

第一組:因爲Quarangle 是Square的父類,所以當我們實例化一個Quarangle 時,他有可能是Square類,故在編譯上沒有問題。但父類不一定是子類的一個實例,子類一定是父類的一個實例,所以輸出if 判斷爲 false 


第二組:子類一定是父類的一個實例,所以 if 判斷爲true


第三組: 我們實例化的是一個Quarangle對象,但已經明確知道了這個Quarangle是Square類型的,即qu是Square的實例,所以 if 判斷爲true


第四組: Anything 不是Quarangle的子類,也不是其父類,兩者並沒有聯繫,所以 未通過編譯。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章