Java多态的应用

来源:互联网 发布:樱井知香步兵番号 编辑:程序博客网 时间:2024/05/16 07:59
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();                                      }}


2 0
原创粉丝点击