1. 程式人生 > >繼承中類型的轉換

繼承中類型的轉換

pre 主函數 void 正常 line instance 對象 div 是否

執行以下代碼:

class Mammal{}
class Dog extends Mammal {}
class Cat extends Mammal{}

public class TestCast
{
    public static void main(String args[])
    {
        Mammal m;
        Dog d=new Dog();
        Cat c=new Cat();
        m=d;
        d=m;
        d=(Dog)m;
        d=c;
        c=(Cat)m;

    }
}

這個程序不能正常運行,因為在主函數裏d=m;這句話不符合Java的規則,

在繼承中,基類不能對子類的對象賦值,而子類可以對基類的對象賦值,

而且,非繼承關系的兩個類再賦值是也應該先進行強制轉化,比如:d=c;,

強制轉化也不是每次都可以成功的。可以使用instanceof運算符判斷一個對

象是否可以轉換為指定的類型,如果可以,則繼續進行。

繼承中類型的轉換