Java多态的应用

1.使用多态实现为宠物喂食需求说明:实现如果所示的当宠物饿了(健康值介于0至100之间时),
主人需要为宠物喂食(健康值加3,但上限不超过100),为宠物增加健康值的输出效果。

2.使用多态为宠物看病需求说明: 
(1)编写主人类(Master),添加不同的方法,根据输入的宠物类型不同,为不同的宠物看病。编写测试类验证;
(2)使用多态修改代码,为各宠物类添加看病的方法,主人类中保留一个为宠物看病方法即可,参数类型为宠物类类型。编写测试类验证输出效果如图所示。
(注意:同一个引用类型,使用不同的实例而执行不同操作就是多态;方法重写是实现多态的基础)
package cn.java.pet;

/**
* 宠物抽象类
*/
public abstract class Pet {
      private String petName;   //宠物名称
      private int petHealth;    //宠物健康值
      private int petLove;      //宠物亲密度
      
      public Pet(){
                
      }
      
      public Pet(String name){
                this.petName = name;
                this.petHealth = 100;
                this.petLove = 0;
      }
      
      /**
         * 宠物自我介绍
         */
      public void printInfo(){
                System.out.println("我的名字叫"+this.petName+",我的健康值是"+this.petHealth+",我与主人的亲密程度是"+this.petLove);
      }
      
      /**
         * 宠物看病
         */
      public abstract void cure();
      
      /**
         * 宠物吃饭
         */
      public abstract void eat();
      
      /**
         * 宠物玩游戏
         */
      public abstract void play();
      
      public String getPetName() {
                return petName;
      }

      public void setPetName(String petName) {
                this.petName = petName;
      }

      public int getPetHealth() {
                return petHealth;
      }

      public void setPetHealth(int petHealth) {
                this.petHealth = petHealth;
      }

      public int getPetLove() {
                return petLove;
      }

      public void setPetLove(int petLove) {
                this.petLove = petLove;
      }

      
}

package cn.java.pet;

/**
* 狗狗类
*/
public class DogPet extends Pet {
      private String dogBreed;   //狗狗品种
      
      
      //如果父类定义带有参数的构造函数未显示定义无参构造函数,那么子类必须需要调用父类需求的构造函数
      public DogPet(String name,String breed){
                super(name);
                this.setDogBreed(breed);
      }
      
      
      /**
         * 狗狗自我介绍, 对宠物类printInfo()方法进行了重写(覆盖)
         */
      public void printInfo(){
                super.printInfo();//通过super关键字调用父类的需要的方法,super是指在子类中代表父类对象的引用(指向同一个堆内存中地址)
                System.out.println("我是一只"+this.getDogBreed());
      }

      /**
         * 狗狗看病
         * 重写父类宠物看病的抽象方法
         */
      public void cure() {
                if(this.getPetHealth()<= 10){
                        System.out.println("吃药、打针");
                        this.setPetHealth(this.getPetHealth() + 50);//医治好后为狗狗健康值加50
                }else{
                        System.out.println("主人,我很健康不需要看病.");
                }
      }

      /**
         * 狗狗吃饭
         * 重写父类宠物吃饭的抽象方法
         */
      public void eat() {
                if(this.getPetHealth()<= 100){
                        System.out.println("狗狗"+this.getPetName()+"吃饱啦!健康值增加3.");
                        this.setPetHealth(this.getPetHealth()+3);
                }else{
                        System.out.println("狗狗"+this.getPetName()+"已经太饱啦,需要运动."+"健康值:"+this.getPetHealth());
                }
      }
      
      /**
         * 狗狗玩游戏
         * 重写父类宠物玩游戏的抽象方法
         */
      public void play() {
                System.out.println("狗狗"+this.getPetName()+"正在玩飞盘...");
                this.setPetLove(this.getPetLove()+5);   //玩游戏与主人亲密度加5
                this.setPetHealth(this.getPetHealth()-10); //健康值减10
                
      }


      public String getDogBreed() {
                return dogBreed;
      }


      public void setDogBreed(String dogBreed) {
                this.dogBreed = dogBreed;
      }


      
}

package cn.java.pet;

/**
* 企鹅类
*/
public class PenguinPet extends Pet {
      private String penguinSex;   //企鹅性别
      
      public PenguinPet(String name,String sex){
                super(name);
                this.penguinSex = sex;
      }
      
      
      /**
         * 企鹅自我介绍 ,对宠物类printInfo()方法进行了重写(覆盖)
         */
      public void printInfo() {
                super.printInfo();
                System.out.println("我的性别是"+this.penguinSex);
      }
      
      
      /**
         * 企鹅看病
         * 重写父类宠物看病的抽象方法
         */
      public void cure() {
                if(this.getPetHealth()<= 10){
                        System.out.println("吃药 、疗养");
                        this.setPetHealth(this.getPetHealth()+50);
                }else{
                        System.out.println("主人,我很健康不需要看病.");
                }
      }
      
      /**
         * 企鹅吃饭
         * 重写父类宠物吃饭的抽象方法
         */
      public void eat() {
                if(this.getPetHealth()<= 100){
                        System.out.println("企鹅"+this.getPetName()+"吃饱啦!健康值增加5");
                        this.setPetHealth(this.getPetHealth()+5);
                }else{
                        System.out.println("企鹅"+this.getPetName()+"太饱啦,需要运动!"+"健康值:"+this.getPetHealth());
                }
      }
      
      /**
         * 企鹅玩游戏
         * 重写父类宠物玩游戏的抽象方法
         */
      public void play() {
                System.out.println("企鹅"+this.getPetName()+"正在游泳...");
                this.setPetLove(this.getPetLove()+5);
                this.setPetHealth(this.getPetHealth()-10);
                
      }


      public String getPenguinSex() {
                return penguinSex;
      }

      public void setPenguinSex(String penguinSex) {
                this.penguinSex = penguinSex;
      }


      


      
}

package cn.java.pet;

/**
* 主人类
*/
public class Master {

      /**
         * 主人为宠物看病
         * @param pet 宠物
         */
      public void treatPet(Pet pet){
                pet.cure();
      } 
      
      /**
         * 与主人玩游戏
         * @param pet
         */
      public void GamePet(Pet pet){
                pet.play();
      }
      
      /**
         * 吃饭
         * @param pet
         */
      public void eatPet(Pet pet){
                pet.eat();
      }
      
}

package cn.java.pet.test;

import cn.java.pet.DogPet;
import cn.java.pet.Master;
import cn.java.pet.PenguinPet;
import cn.java.pet.Pet;

/**
* 测试类
*/
public class PetTest {

      public static void main(String[] args) {
                //创建主人实例对象
                Master master = new Master();
                //创建狗狗实例对象
                Pet dogPet = new DogPet("欧欧","雪娜瑞犬");
                //与主人玩游戏
                master.GamePet(dogPet);
                dogPet.printInfo();
                //吃饭
                master.eatPet(dogPet);
                dogPet.printInfo();
                //看病
                master.treatPet(dogPet);
                dogPet.printInfo();
                
                
      }

}


  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值