日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

解析java多态经典习题

發布時間:2024/3/24 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 解析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多态经典习题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。