1. 程式人生 > >Java—多態

Java—多態

隱式 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 extends
Animal { 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—多態