• JAVA多态练习_实现主人喂宠物吃饭,和其玩耍功能


    2、在课上案例的基础上实现与宠物玩耍功能

     需求说明:

    主人和狗狗玩接飞盘游戏,狗狗健康值减少10,与主人亲密度增加5

    主人和企鹅玩游泳游戏,企鹅健康值减少10,与主人亲密度增加5

     提示:

     Dog类添加catchingFlyDisc()方法,实现接飞盘功能

     Penguin类添加swimming()方法,实现游泳功能

     主人添加play(Pet pet)方法

     如果pet代表Dog就玩接飞盘游戏

     如果pet代表Penguin就玩游泳游戏

     1 package day12;
     2 
     3 public class Master {
     4     
     5     private String hostName;
     6 
     7     public String getHostName() {
     8         return hostName;
     9     }
    10 
    11     public void setHostName(String hostName) {
    12         this.hostName = hostName;
    13     }
    14 
    15     public Master(String hostName) {
    16         super();
    17         this.hostName = hostName;
    18     }
    19 
    20     public Master() {
    21         super();
    22     }
    23     
    24     //给狗喂食
    25     public void feed(Dog dog){
    26         dog.eat();
    27     }
    28     
    29     public void feed(Penguin p){
    30         p.eat();
    31     }
    32     //和宠物玩
    33     public void play(Pet pet){
    34         //子类对象的多态性,父类的引用指向子类的实例
    35         //pet对象可以调用swimming方法吗   不会
    36         //就想调用swimming方法
    37         //把pet转成dog对象,强制类型转换
    38         
    39         //编译期间,程序会把p1看做是宠物类对象
    40         if(pet instanceof Dog){//判断pet是否指向子类Dog的实例
    41             Dog dog=(Dog)pet;//向下转型
    42             dog.catchingFlyDisc();
    43         }else if(pet instanceof Penguin){
    44             Penguin pg=(Penguin)pet;
    45             pg.swimming();
    46         }
    47         
    48     }
    49 
    50 }
    package day12;
    
    //宠物类
    public class Pet {
        
        private String name;//名字
        protected int  health=100;//健康值
        protected int Intimacy=100;//亲密度
        public int getIntimacy() {
            return Intimacy;
        }
        
        public Pet(String name, int health, int intimacy) {
            super();
            this.name = name;
            this.health = health;
            Intimacy = intimacy;
        }
        
    
        public void setIntimacy(int intimacy) {
            Intimacy = intimacy;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getHealth() {
            return health;
        }
        public void setHealth(int health) {
            this.health = health;
        }
        public Pet(String name, int health) {
            super();
            this.name = name;
            this.health = health;
        }
        public Pet(String name) {
            super();
            this.name = name;
        }
        public Pet(int health) {
            super();
            this.health = health;
        }
        public Pet() {
            super();
        }
        
        //输出属性值
        public void info(){
            System.out.println("姓名为:"+this.name+",健康值为:"+this.health);
        }
        
        //吃饭的方法
        public void eat(){
            System.out.println("宠物吃饭");
        }
    }
     1 package day12;
     2 
     3 public class Dog extends Pet {
     4     
     5     private String starin;//品种
     6 
     7     public String getStarin() {
     8         return starin;
     9     }
    10 
    11     public void setStarin(String starin) {
    12         this.starin = starin;
    13     }
    14 
    15     public Dog(String name, String starin) {
    16         super(name);
    17         this.starin = starin;
    18     }
    19 
    20     public Dog() {
    21         super();
    22     }
    23     
    24     //重写吃饭的方法
    25     public void eat(){
    26         super.health+=3;
    27         System.out.println("狗狗吃饱了,健康值加3,健康值为:"+super.health);
    28     }
    29     
    30     public void info(){
    31         super.info();//调用父类未重写
    32         System.out.println("品种为:"+this.starin);
    33     }
    34     //接飞盘方法
    35     public void catchingFlyDisc(){
    36         super.health-=10;
    37         super.Intimacy+=5;
    38         System.out.println("狗狗完成接飞盘游戏,健康值-10,亲密度+5,健康值为"+health+",亲密度为"+Intimacy);
    39     }
    40     //测试
    41     public void sleep(){
    42         System.out.println("狗在呼呼大睡");
    43     }
    44 }
     1 package day12;
     2 
     3 public class Penguin extends Pet {
     4     
     5     private String sex;
     6 
     7     public String getSex() {
     8         return sex;
     9     }
    10 
    11     public void setSex(String sex) {
    12         this.sex = sex;
    13     }
    14 
    15     public Penguin(String name, String sex) {
    16         super(name);
    17         this.sex = sex;
    18     }
    19 
    20     public Penguin() {
    21         super();
    22         
    23     }
    24     //重写吃饭的方法
    25     public void eat(){
    26         super.health+=5;
    27         System.out.println("企鹅吃饱了,健康值加5,健康值为:"+super.health);
    28     }
    29     //游泳方法
    30         public void swimming(){
    31             super.health-=10;
    32             super.Intimacy+=5;
    33             System.out.println("企鹅完成游泳游戏,健康值-10,亲密度+5,健康值为"+health+",亲密度为"+Intimacy);
    34         }
    35         
    36     public void info(){
    37         super.info();//调用父类未重写
    38         System.out.println("性别为:"+this.sex);
    39         }
    40     
    41     
    42     }
     1 package day12;
     2 /**
     3  * 1.什么是多态?一个对象的多种形态
     4  * 2.多态的体现?
     5  * (1)方法的重载和重写
     6  * (2)继承和接口的实现:子类对象的多态性:父类的引用指向子类的实例  Pet p=new Dog()
     7  *
     8  * 3.程序分为两种状态,编译状态,运行状态
     9  * 对多态来说,编译时看左边的内容,讲变量看做是宠物类类型
    10  * 运行时看右边,真正执行的对象,就是子类对象,执行时执行的是子类对象重写的方法
    11  */
    12 
    13 public class Test {
    14 
    15     public static void main(String[] args) {
    16         
    17         //宠物
    18         Pet p=new Pet("小白");
    19         p.eat();
    20         p.info();
    21         
    22         System.out.println("======================================");
    23         Dog d=new Dog("小毛", "金毛");
    24         d.info();
    25         d.catchingFlyDisc();
    26         System.out.println("======================================");
    27         System.out.println("======================================");
    28         Penguin pg=new Penguin("Q妹","女");
    29         pg.swimming();
    30         pg.info();
    31         
    32         System.out.println("======================================");
    33         Master m=new Master();
    34         m.feed(d);
    35         m.feed(pg);
    36         //调用游戏方法,判断主人和谁玩游戏
    37         m.play(d);
    38         m.play(pg);
    39         
    40     }
    41 
    42 }

    运行截图:

  • 相关阅读:
    vulcanjs 包类型
    vulcanjs schemas&& collections
    vulcanjs 核心架构概念
    vulcanjs 开源工具方便快速开发react graphql meteor 应用
    ory Oathkeeper Ecosystem
    ory Oathkeeper docker-compose 安装运行
    benthos stream nats 集成试用
    benthos 几个方便的帮助命令
    benthos 通过配置文件配置 stream 说明
    benthos 通过rest api 配置 stream 说明
  • 原文地址:https://www.cnblogs.com/yumu77/p/13708196.html
Copyright © 2020-2023  润新知