Animal dog = new Dog();//向上轉型
- dog只能調用Animal中定義的成員變量或者方法;
- 若Dog中存在重寫Animal中的成員變量或者方法,則dog調用的是Dog中重寫的部分;
- dog不能調用Dog中新增加的方法。
Animal a1 = new Animal();
Animal a2 = new Dog();
Dog dog = (Dog)a1;//向下轉型,這種情況是不安全的,編譯不會出錯,但是運行會報異常java.lang.ClassCastException
Dog dog2 = (Dog)a2;//向下轉型,這種情況是安全的
總結:
- 向下轉型需要強制轉換,向上轉型不需要
- 父類 a = new 子類();可以,但是 子類 z = new 父類();不可以
- 向上轉型會丟失子類新增加的方法,但是會使用子類重寫的方法
- 向上轉型,減少重複代碼,使代碼更加簡潔