public class TestCasting2{ public static void main(String args[]){ TestCasting2 test2= new TestCasting2(); Animal a = new Animal("animalName"); Dog d = new Dog("dogName","dogColor"); Cat c = new Cat("catName","catColor"); test2.f(a); test2.f(d); test2.f(c); } public void f(Animal a){ //父類引用型參數,達到了面向對象苦苦追求的可複用性,多種類型的對象,共同使用一個方法 System.out.println(a.name); if(a instanceof Dog){ Dog d2 = (Dog)a; //強制轉換,而後就能夠使用子類當中的屬性了 System.out.println(d2.folorColor); }else if(a instanceof Cat){ Cat c2 = (Cat)a; System.out.println(c2.eyesColor); } //這裏有過還有一個鳥對象,只須要加一個if判斷語句就ok了,不須要重寫一個方法public void f2(Bird bird){} } } 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; } }
程序運行結果:this
總結:spa
這邊文章的基本記錄就是:咱們建立一個方法,方法的參數是父類的引用。而咱們實際當中傳的是子類的對象,這樣咱們就能夠多個對象同時使用這一個方法了。而後咱們在方法中經過強制類型轉換,調用各個對象的各個屬性。code
經過這種對象的向上轉型方法能夠使咱們的代碼可複用性提升一些,但並非可複用性達到了最好,詳情見下一遍文章。對象
經過對象轉型,達到了面向對象的可複用性。就比如:我要蓋好一座大樓,而後要在大樓邊上加一個廚房,咱們只需直接蓋廚房就行了。而不是將樓房的主題建築拆掉,而後從新蓋一次樓房。blog