Java—多態
阿新 • • 發佈:2017-11-11
隱式 ati else generate 強制類型轉換 tail animal 練習 運行時
一、多態(對象的多種形態)
1.引用的多態
父類的引用指向本類的對象
父類的引用指向子類的對象(引用多態)
(不允許子類對象指向父類)
2.方法多態
創建本類對象時調用的方法為本類的方法
創建子類對象時,調用的方法為子類重寫的方法或繼承的方法
**使用多態時,兩個類一定要有繼承關系
當子類擁有的方法父類沒有時,指向子類的父類對象無法調用。
package com.sy; public class Animal { public void eat() { System.out.println("動物有吃的能力"); } }
package com.sy; public class Dog extendsAnimal { public void eat() { System.out.println("狗屎吃肉的"); } public void watchdoor() { System.out.println("狗具有看門的能力"); } }
package com.sy; public class initail { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub/*Animal pro1=new Animal(); Animal pro2=new Dog(); Animal pro3=new Cat(); pro1.eat(); pro2.eat(); pro3.eat();*/ Dog dog=new Dog(); Animal animal=dog;//自動類型轉換提升,向上類型轉換 if(animal instanceof Dog) { Dog dog2=(Dog)animal;//向下類型轉換 } else{ System.out.println("無法進行類型轉換 轉換成dog類型"); } /*判斷一個引用是否是某個類型或某個類型的子類型會返回一個bool值*/ if(animal instanceof Cat) { Cat cat =(Cat)animal;//編譯時為Cat類,運行時實際開辟的內存是Dog類型的,運行時會報錯 } else{ System.out.println("無法進行類型轉換 轉換成cat類型"); } } }
package com.sy; public class Cat extends Animal { }
練習(描述運輸工具)
汽車:在陸地上(陸地載客40人)
輪船:在海上(海上200人)
飛機:在天上(天空XXX人)
運輸客人,各自的運輸方式
創建五個以上生活當中的和交通工具,並同時查看他們的運輸客人的方式
引用類型的轉換
1.向上類型的轉換(隱式/自動類型轉換(子類強制轉換成父類)),是小類型到達類型的轉換(無風險)
2.向下類型的轉換(強制類型轉換),大類型到小類型的轉換(有風險,可能發生數據溢出)
3.可以使用instanceof運算符,來解決引用對象的類型,避免類型轉換的安全性問題
4.用於驗證是否可以進行強制類型轉換
if(animal instanceof Cat)
{
Cat cat =(Cat)animal;//編譯時為Cat類,運行時實際開辟的內存是Dog類型的,運行時會報錯
}
else{
System.out.println("無法進行類型轉換 轉換成cat類型");
}
package com.sy; public class Trantool { public void tran() { System.out.println("運輸方式"); } }
package com.sy; public class tramain { public static void main(String[] args) { Trantool tran1=new Trantool(); Trantool tran2=new Car(); Trantool tran3=new Board(); Trantool tran4=new Plant(); tran1.tran(); tran2.tran(); tran3.tran(); tran4.tran(); } }
package com.sy; public class Car extends Trantool { public void tran() { System.out.println("小汽車的運輸方式"); } }
package com.sy; public class Plant extends Trantool { public void tran() { System.out.println("飛機的運輸方式"); } }
Java—多態