解析java多态经典习题
解析java多態經典習題
1 題目一
1.1 題目內容
編寫程序實現樂手彈奏樂器。樂手可以彈奏不同的樂器從
而發出不同的聲音。
可以彈奏的樂器包括二胡、鋼琴和琵琶。
實現思路及關鍵代碼:
①定義樂器類Instrument,包括方法makeSound()
②定義樂器類的子類:二胡Erhu、鋼琴Piano和
小提琴Violin
③定義樂手類Musician,可以彈奏各種樂器
play(Instrument i)
④定義測試類,給樂手不同的樂器讓他彈奏
1.2 示例代碼
Instrument類
package Work03; public class Instrument {public void makeSound(){System.out.println("樂器在奏樂");} }Erhu類
package Work03;public class Erhu extends Instrument{@Overridepublic void makeSound() {System.out.println("二胡,彈奏的曲目是二泉映月");} }Piano類
package Work03;public class Piano extends Instrument{@Overridepublic void makeSound() {System.out.println("鋼琴,彈奏的曲目是致愛麗絲");} }Violin類
package Work03;public class Violin extends Instrument{@Overridepublic void makeSound() {System.out.println("小提琴,彈奏的曲目是沉思");} }Muscian類
package Work03;public class Musician {private String name;public Musician() {}public Musician(String name) {this.name = name;}public void play(Instrument i){System.out.print(name+"彈奏的樂器是");i.makeSound();} }Test類
package Work03; public class Test {public static void main(String[] args) {Musician m=new Musician("張三");m.play(new Piano());m.play(new Erhu());m.play(new Violin());} }1.3 示例代碼運行截圖
2 題目二
2.1 題目內容
編寫程序實現主人喂養寵物和跟寵物玩耍的場景
定義寵物類Pet,寵物都需要吃東西,跟主人玩。
定義狗類Dog、貓類Cat、Dolphin海豚類繼承Pet寵物類。
狗狗吃骨頭、貓咪吃老鼠、海豚吃烏賊。
主人和寵物的玩耍是每個寵物都獨有一份
主人跟狗狗完抓飛盤,主人跟貓咪玩抓老鼠、主人跟海豚玩轉圈圈。
2.2 示例代碼
Pet類
package Work03; //上課練習 public class Pet {private String name;public Pet() {}public Pet(String name) {this.name = name;}//吃的方法public void eat(){}public String getName() {return name;}public void setName(String name) {this.name = name;} }Dog類
package Work03;public class Dog extends Pet{public Dog() {}public Dog(String name) {super(name);}public void catchDisc() {System.out.println("玩抓飛盤");}@Overridepublic void eat() {System.out.println("狗狗在啃骨頭");} }Cat類
package Work03;public class Cat extends Pet{public Cat() {}public Cat(String name) {super(name);}public void catchMouse() {System.out.println("玩抓老鼠");}@Overridepublic void eat() {System.out.println("貓咪吃老鼠");} }Dolphin類
package Work03;public class Dolphin extends Pet{public Dolphin() {}public Dolphin(String name) {super(name);}public void runningCircle() {System.out.println("玩轉圈圈");}@Overridepublic void eat() {System.out.println("海豚吃烏賊");} }Master類
package Work03;public class Master {private String name;public Master() {}public Master(String name) {this.name = name;}public void feed(Pet pet){//得出喂食的寵物是什么名字,是狗還是貓還是海豚if(pet instanceof Dog){System.out.println(name+"喂食的寵物是一只叫"+ ((Dog)pet).getName()+"的狗狗");}else if(pet instanceof Cat){System.out.println(name+"喂食的寵物是一只叫"+ ((Cat)pet).getName()+"的貓咪");}else if(pet instanceof Dolphin){System.out.println(name+"喂食的寵物是一只叫"+ ((Dolphin)pet).getName()+"的海豚");}//吃的方法都是被重寫的,無需進行類型的判斷pet.eat();}public void play(Pet pet){//每個寵物的玩耍方法都是其獨有的方法,因此需要向下轉型,向下轉型前需要對類型進行判斷if(pet instanceof Dog){System.out.print(name+"是和一只叫"+ ((Dog)pet).getName()+"的狗狗");((Dog)pet).catchDisc();}else if(pet instanceof Cat){System.out.print(name+"是和一只叫"+ ((Cat)pet).getName()+"的貓咪");((Cat)pet).catchMouse();}else if(pet instanceof Dolphin){System.out.print(name+"是和一只叫"+ ((Dolphin)pet).getName()+"的海豚");((Dolphin)pet).runningCircle();}} }Test類
package Work03; public class Test {public static void main(String[] args) {Master master=new Master("張三");Dog dog=new Dog("德福");Cat cat=new Cat("叮當");Dolphin dolphin=new Dolphin("祥云");master.feed(dog);master.feed(cat);master.feed(dolphin);master.play(dog);master.play(cat);master.play(dolphin);} }2.3 示例代碼運行截圖
3 思路總結
3.1 使用多態后調用重寫的方法時,無需進行對象類型的判斷
理由:因為它會自動去找對應類型里面的重寫了的方法去運行
3.2 使用多態后,想要調用子類特有的方法,必須實現向下轉型,且向下轉型前必須判斷對象是哪個類型的
向下轉型的理由: 使用多態后只能調用父類型特征里面從父類繼承過來的屬性、非重寫方法、以及子類重寫的方法,要使用子類特有的方法就必須是子類對象才可以調用,因此需要向下轉型
向下轉型前必須判斷對象的類型:因為只有強轉的類型和實例化對象的類型保持一致,兩者才可以強轉,不然會出現ClassCastException類型轉化異常,例如Animal a=new Dog();你只能對Animal強轉成Dog類型,你強轉成Cat就會報錯(運行報錯,編譯可以通過)
總結
以上是生活随笔為你收集整理的解析java多态经典习题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 模拟登录正方教务管理系统-JAVA实现
- 下一篇: requests登陆正方教务管理系统