java多態(tài)實(shí)現(xiàn)電子寵物系統(tǒng)
本文實(shí)例為大家分享了java多態(tài)實(shí)現(xiàn)電子寵物系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
效果實(shí)現(xiàn):

代碼實(shí)現(xiàn):
1、主人類:
public class Master {
? ? //領(lǐng)養(yǎng)
? ? public Pet adopt(String name){
? ? ? ? if ("狗狗".equals(name)){
? ? ? ? ? ? return new Dog();
? ? ? ? }else if (name.equals("企鵝")){
? ? ? ? ? ? return new Penguin();
? ? ? ? }
? ? ? ? return null;
? ? }
? ? //喂食
? ? public void feed(Pet pet, String food){
? ? ? ? pet.eat(food);
? ? }
? ? //玩耍
? ? public void play(Pet pet){
? ? ? ? if(pet instanceof Dog){
? ? ? ? ? ? Dog d= (Dog) pet;
? ? ? ? ? ? d.catchDisk();
? ? ? ? }else if(pet instanceof Penguin){
? ? ? ? ? ? Penguin p= (Penguin) pet;
? ? ? ? ? ? p.swimInSouth();
? ? ? ? }
? ? }
? ? //捐獻(xiàn)
? ? public Pet donate(String name){
? ? ? ? if("狗狗".equals(name)){
? ? ? ? ? ? return new Dog();
? ? ? ? }else if(name.equals("企鵝")){
? ? ? ? ? ? return new Penguin();
? ? ? ? }
? ? ? ? return null;
? ? }
}2、狗狗類:
public class Dog extends Pet {
? ? public void catchDisk(){
? ? ? ? System.out.println("狗狗接飛盤!");
? ? }
? ? public Dog(int health) {
? ? ? ? super(health);
? ? }
? ? public Dog() {
? ? }
? ? @Override
? ? public void eat(String food) {
? ? ? ? System.out.println("狗狗吃"+food+",吃飽后健康值+3");
? ? ? ? setHealth(getHealth()+3);
? ? }
}3、企鵝類:
public class Penguin extends Pet{
? ? public void swimInSouth(){
? ? ? ? System.out.println("企鵝在南極游泳!");
? ? }
? ? public Penguin(int health) {
? ? ? ? super(health);
? ? }
? ? public Penguin() {
? ? }
? ? @Override
? ? public void eat(String food) {
? ? ? ? System.out.println("企鵝寶寶吃"+food+",吃完后,健康值加5");
? ? ? ? setHealth(getHealth()+5);
? ? }
}4、寵物類,Pet:
public class Pet {
? ? private int health;
? ? public int getHealth() {
? ? ? ? return health;
? ? }
? ? public void setHealth(int health) {
? ? ? ? this.health = health;
? ? ? ? if(this.health>100){
? ? ? ? ? ? this.health=100;
? ? ? ? ? ? System.out.println("已經(jīng)吃飽了,再吃就撐破了");
? ? ? ? }
? ? }
? ? public Pet() {
? ? }
? ? public Pet(int health) {
? ? ? ? this.health = health;
? ? }
? ? public void eat(String food){
? ? ? ? System.out.println("寵物吃"+food);
? ? }
}5、測(cè)試類:
public class Test {
? ? public static void main(String[] args) {
? ? ? ? Scanner sc = new Scanner(System.in);
? ? ? ? Master master = new Master();
? ? ? ? //領(lǐng)養(yǎng)
? ? ? ? System.out.print("請(qǐng)輸入您要領(lǐng)養(yǎng)的寵物:");
? ? ? ? String dname = sc.next();
? ? ? ? Pet p = master.adopt(dname);
? ? ? ? //主人給狗狗喂食,玩耍
? ? ? ? System.out.print("請(qǐng)輸入您要喂得食物:");
? ? ? ? String dfood = sc.next();
? ? ? ? master.feed(p,dfood);
? ? ? ? System.out.println(p.getHealth());
? ? ? ? master.play(p);
? ? ? ? //主人給企鵝喂食,玩耍
? ? ? ? System.out.print("請(qǐng)輸入您要玩的寵物:");
? ? ? ? String pname = sc.next();
? ? ? ? p = master.adopt(pname);
? ? ? ? System.out.print("請(qǐng)輸入您要喂的食物:");
? ? ? ? String pfood = sc.next();
? ? ? ? master.feed(p,pfood);
? ? ? ? System.out.println(p.getHealth());
? ? ? ? master.play(p);
? ? ? ? //捐贈(zèng)出去
? ? ? ? System.out.print("請(qǐng)輸入您要捐贈(zèng)的寵物:");
? ? ? ? String jname = sc.next();
? ? ? ? Pet pet = master.donate(jname);
? ? ? ? System.out.println();
? ? ? ? System.out.println("您捐獻(xiàn)的是:"+pet.getClass().getName());
? ? }
}補(bǔ):這里測(cè)試類我是讓用戶在控制臺(tái)輸入,如果不想輸入,可將測(cè)試類Test換成下面的代碼:
public class TestPet {
? ? public static void main(String[] args) {
? ? ? ? Master m = new Master();
? ? ? ? //領(lǐng)養(yǎng)
? ? ? ? Pet p = m.adopt("狗狗");
? ? ? ? //主人給狗狗喂食,玩耍
? ? ? ? m.feed(p,"大骨頭");
? ? ? ? System.out.println(p.getHealth());
? ? ? ? m.play(p);
? ? ? ? //主人給企鵝喂食,玩耍
? ? ? ? p = m.adopt("企鵝");
? ? ? ? m.feed(p,"小魚");
? ? ? ? System.out.println(p.getHealth());
? ? ? ? m.play(p);
? ? ? ? //捐獻(xiàn)出去
? ? ? ? Pet pet = m.donate("狗狗");
? ? ? ? System.out.println("您捐獻(xiàn)的是:"+pet.getClass().getName());
? ? }
}以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
SpringCloud通過(guò)MDC實(shí)現(xiàn)分布式鏈路追蹤
在DDD領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)中,我們使用SpringCloud來(lái)去實(shí)現(xiàn),但排查錯(cuò)誤的時(shí)候,通常會(huì)想到Skywalking,但是引入一個(gè)新的服務(wù),增加了系統(tǒng)消耗和管理學(xué)習(xí)成本,對(duì)于大型項(xiàng)目比較適合,但是小的項(xiàng)目顯得太過(guò)臃腫了,所以本文介紹了SpringCloud通過(guò)MDC實(shí)現(xiàn)分布式鏈路追蹤2024-11-11
logback的UNDEFINED_PROPERTY屬性源碼執(zhí)行流程解讀
這篇文章主要為大家介紹了logback的UNDEFINED_PROPERTY屬性源碼執(zhí)行流程解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11
Mybatis注解開發(fā)@Select執(zhí)行參數(shù)和執(zhí)行sql語(yǔ)句的方式(最新詳解)
@Select 是 Mybatis 框架中的一個(gè)注解,用于執(zhí)行 SQL 查詢語(yǔ)句,并把查詢結(jié)果映射到指定的 Java 對(duì)象中,這篇文章主要介紹了Mybatis注解開發(fā)@Select執(zhí)行參數(shù)和執(zhí)行sql語(yǔ)句的方式,需要的朋友可以參考下2023-07-07
使用String類型小數(shù)值轉(zhuǎn)換為L(zhǎng)ong類型
這篇文章主要介紹了使用String類型小數(shù)值轉(zhuǎn)換為L(zhǎng)ong類型操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09
Java8 用Lambda表達(dá)式給List集合排序的實(shí)現(xiàn)
這篇文章主要介紹了Java8 用Lambda表達(dá)式給List集合排序的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08

