JAVA多態學習2

來源:互聯網
上載者:User

標籤:java   多態   向上轉型   向下轉型   

好啦,這裡緊接著上次沒說的向下轉型,請讀者結合上次討論的向上轉型的例子一起探討(其實本次代碼也有加上,放心)。

我們這裡希望從向下轉型會出現的兩種基本情況進行探討

package downcasting;//動物類Animal父類class Animal{    String name;    int age;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    //動物會叫    public void cry(){        System.out.println("不知道怎麼叫");    }    //動物吃東西    public void eat(){        System.out.println("不知道吃什麼");    }}//建立Dog子類並extends繼承Animal父類及覆蓋cry方法class Dog extends Animal{    //狗叫    public void cry(){                         //覆蓋父類方法        System.out.println("汪汪叫");    }    //狗吃東西    public void eat(){                          //覆蓋父類方法        System.out.println("狗愛吃骨頭");            }    public void bite(){        System.out.println("狗會咬人...");    }}public class Downcasting {    public static void main(String[] args) {        // TODO 自動產生的方法存根           Animal g1=new Dog();  //向上轉型           g1.cry();           g1.eat();           /*            * 情況一:如果父類引用的對象如果引用的是指向的子類對象,            * 那麼在向下轉型的過程中是安全的。也就是編譯運行是不會出錯誤的            */           Dog dog=(Dog)g1;         //向下轉型,編譯和運行皆不會出錯           dog.cry();           dog.eat();           Animal g2=new Animal();           /*            *情況二:如果父類引用的對象是父類本身,那麼在向下轉型的過程中是不安全的,            *編譯不會出錯,但是運行時會出現java.lang.ClassCastException錯誤。            *它可以使用instanceof來避免出錯此類錯誤。            * */         /*          *錯誤如下: Exception in thread "main" java.lang.ClassCastException:          *         downchange.Animal cannot be cast to downchange.Dog                    at downchange.Downchange.main(Downchange.java:62)           Dog dog1=(Dog)g2;           dog1.cry();           dog1.eat();           */           if(g2 instanceof Dog){                    Dog dog1=(Dog)g2;                    dog1.cry();                    dog1.eat();           }           else if(g2 instanceof Animal){               System.out.println("g2是Animal的執行個體");}           //Dog g3=new Animal();   //不存在從Animal轉換到Dog    }}

ps:
instanceof:
1.用instanceof來測試它所指向的對象是否是某個類。
2.instanceof在物件類型的強制轉換,先判斷是否是某種類型,是的話再強制轉換成改類型。

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

JAVA多態學習2

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.