物件轉型(casting)
1、一個基類的引用型別變數可以“指向”其子類的物件。
2、一個基類的引用不可以訪問其子類物件新增加的成員(屬性和方法)。
3、可以使用 引用變數 instanceof 類名 來判斷該引用型變數所“指向”的物件是否屬於該類或該類的子類。
4、子類的物件可以當做基類的物件來使用稱作向上轉型(upcasting),反之成為向下轉型(downcasting)。
public class TestCasting{ public static void main(String args[]){ Animal a = new Animal("a"); Cat c = new Cat("c","cEyesColor"); Dog d = new Dog("d","dForlorColor"); System.out.println(a instanceof Animal); //true System.out.println(c instanceof Animal); //true System.out.println(d instanceof Animal); //true System.out.println(a instanceof Dog); //false a = new Dog("d2","d2ForlorColor"); //父類引用指向子類物件,向上轉型 System.out.println(a.name); //可以訪問 //System.out.println(a.folorColor); //!error 不可以訪問超出Animal自身的任何屬性 System.out.println(a instanceof Animal); //是一隻動物 System.out.println(a instanceof Dog); //是一隻狗,但是不能訪問狗裡面的屬性 Dog d2 = (Dog)a; //強制轉換 System.out.println(d2.folorColor); //將a強制轉換之後,就可以訪問狗裡面的屬性了 } } class Animal{ public String name; public Animal(String name){ this.name = name; } } class Dog extends Animal{ public String folorColor; public Dog(String name,String folorColor){ super(name); this.folorColor = folorColor; } } class Cat extends Animal{ public String eyesColor; public Cat(String name,String eyesColor){ super(name); this.eyesColor = eyesColor; } }
執行結果: