對象的向上轉型其實就是多態的寫法
格式:父類名稱 對象名稱=new 子類名稱;
含義:右側創建一個子類對象,把它當做父類來看做使用;
注意事項:向上轉型一定是安全的,從小範圍轉向了大範圍。
舉例:
Animal animal=new Cat();
//創建一個貓,當做動物看待 小範圍的貓向上轉換成更大範圍的動物
Animal.java
public abstract class Animal {
public abstract void eat{};
}
cat.java
public class cat extends Animal{
public void eat(){
System.out.println("喫魚")
}
}
main.java
public class main(){
public static void main(String[] args){
Animal animal=new Cat();
animal.eat();
}
}
輸出:
喫魚
向上轉型有個問題,
對象一旦向上轉型爲父類,那麼就無法調用子類原本特有方法。
例如:Cat類有個catchMouse()方法,在主類main中,animal.catchMouse不存在。
解決方案:對象的向下轉型
格式:子類名稱 對象名 =(子類名稱)父類名稱
含義:將父類對象還原爲本來的子類對象
Animal animal=new Cat();
Cat cat=(Cat) animal;
animal.catchMouse();
//次轉換可調用成功