對象轉型(casting)this
一、一個基類的引用類型變量能夠「指向」其子類的對象。spa
二、一個基類的引用不能夠訪問其子類對象新增長的成員(屬性和方法)。code
三、能夠使用 引用變量 instanceof 類名 來判斷該引用型變量所「指向」的對象是否屬於該類或該類的子類。對象
四、子類的對象能夠當作基類的對象來使用稱做向上轉型(upcasting),反之成爲向下轉型(downcasting)。blog
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; } }
運行結果:ast