1. 程式人生 > >Java 多型中的強制型別轉換

Java 多型中的強制型別轉換

目前多型情況下不能訪問子類特有的成員。

如果需要訪問子類特有的成員,那麼需要進行型別強制轉換.


基本資料型別的轉換
    
    小資料型別-------->大的資料型別      自動型別轉換

    大資料型別--------->小資料型別       強制型別轉換     小資料型別  變數名 = (小資料型別)大資料型別;


引用資料型別的轉換
    
    小資料型別--------->大資料型別     自動型別轉換。

    大資料型別--------->小資料型別      強制型別轉換

型別轉換最場景的問題: java.lang.ClassCastException。 強制型別轉換失敗。

 

*/
//動物類
abstract class Animal{

    String name;

    public Animal(String name){
        this.name = name;
    }

    public abstract void run();
}

//老鼠
class  Mouse extends Animal{

    public Mouse(String name){
        super(name);
    }
    
    public  void run(){
        System.out.println(name+"四條腿慢慢的走!");
    }

    //老鼠特有方法---打洞
    public void dig(){
        System.out.println("老鼠在打洞..");
    }
}

//魚
class Fish extends Animal{

    public Fish(String name){
        super(name);
    }

    public  void run(){
        System.out.println(name+"搖搖尾巴游啊遊 !");
    }

    //吹泡泡
    public void bubble(){
        System.out.println(name+"吹泡泡...!");
    }

}

class Demo2 
{
    public static void main(String[] args) 
    {
        /*
        Animal a = new Mouse("老鼠");  //多型
        //呼叫子類特有的方法
        Mouse m  = (Mouse)a;  //強制型別轉換
        m.dig();
        */

        Mouse m = new Mouse("米老鼠");
        Fish f = new Fish("草魚");

        print(f);

    }

    //需求: 定義一個函式可以接收任意型別的動物物件,在函式內部要呼叫到動物特有的方法。
    public static void print(Animal a){ // Animal a   = new Mouse("米老鼠");
        if(a instanceof Fish){
            Fish f = (Fish)a;
            f.bubble();
        }else if(a instanceof Mouse){
            Mouse m = (Mouse)a;
            m.dig();