Java 多態中的強制類型轉換

目前多態狀況下不能訪問子類特有的成員。java

若是須要訪問子類特有的成員,那麼須要進行類型強制轉換.函數


基本數據類型的轉換
    
    小數據類型-------->大的數據類型      自動類型轉換大數據

    大數據類型--------->小數據類型       強制類型轉換     小數據類型  變量名 = (小數據類型)大數據類型;this


引用數據類型的轉換
    
    小數據類型--------->大數據類型     自動類型轉換。對象

    大數據類型--------->小數據類型      強制類型轉換io

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

 

*/
//動物類
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();
        }
    }

}
相關文章
相關標籤/搜索