多態就是父類引用指向子類對象 例如Animal a = new Dog();//向上轉型
多態必須使用向下轉型的時候:當在其他類中調用子類對象中獨有的方法的時候需要向下轉型 Animal a = new Dog(); Dog d = (Dog) a;//向下轉型
多態在實際中的應用實際上就是為了程序的擴展性,OCP原則,關閉修改性,提高可擴展性,盡可能的少修改代碼
/* 測試多態 1.編寫程序實現樂手彈奏樂器。樂手可以彈奏不同的樂器從而發出不同的聲音。 可以彈奏的樂器包括二胡、鋼琴和琵琶。 實現思路及關鍵代碼: 1)定義樂器類Instrument,包括方法makeSound() 2)定義樂器類的子類:二胡Erhu、鋼琴Piano和小提琴Violin 3)定義樂手類Musician,可以彈奏各種樂器play(Instrument i) 4)定義測試類,給樂手不同的樂器讓他彈奏 */ public class TestMusic { public static void main(String[] args) { Musician m = new Musician(); Violin v = new Violin(); m.play(v); } } class Instrument { public void makeSound(){ System.out.println("樂器發聲"); } } class Erhu extends Instrument { public void makeSound(){ System.out.println("二胡在拉"); } } class Piano extends Instrument { public void makeSound(){ System.out.println("彈鋼琴"); } } class Violin extends Instrument { public void makeSound(){ System.out.println("拉小題琴"); } } class Musician { public void play(Instrument i){ i.makeSound(); } }
/* 編寫程序模擬“主人”喂養“寵物”的場景: 提示1: 主人類:Master 寵物類:Pet 寵物類子類:Dog、Cat、YingWu 提示2: 主人應該有喂養的方法:feed() 寵物應該有吃的方法:eat() 只要主人喂寵物,寵物就吃。 要求:主人類中只提供一個喂養方法feed(),要求達到可以喂養各種類型的寵物。 編寫測試程序: 創建主人對象 創建各種寵物對象 調用主人的喂養方法feed(),喂養不同的寵物,觀察執行結果。 通過該案例,理解多態在開發中的作用。 重要提示:feed方法是否需要一個參數,參數選什么類型!!! */ class Testfeed{ public static void main(String[] args) { //創建一個寵物對象 Pet pet = new Pet(); //創建一個狗對象 Dog dog = new Dog(); //創建一個主人對象 Master master = new Master(); //調用主人投喂方法 master.feed(dog); } } class Pet{//創建寵物類讓其它類都繼承他 public void eat(){//創建寵物吃方法 System.out.println("動物在吃"); } } class Dog extends Pet//創建狗類 { public void eat(){//覆蓋父類吃方法對吃方法重寫 System.out.println("狗在吃"); } } class Cat extends Pet { public void eat(){ System.out.println("貓在吃"); } } class YingWu extends Pet { public void eat(){ System.out.println("鸚鵡在吃"); } } class Master { public void feed(Pet p){//此處實際上是 Pet p = new Dog();此處涉及到父類引用指向子類對象,即多態 p.eat();//調用父類吃方法,此處為編譯器識別通過,具體調用哪個子類的吃方法還要看動態綁定的那個子類是啥 } }