PTA 5 动物发声模拟器(多态)分数 10

文章通过创建一个动物模拟器来演示Java中的多态概念。定义了一个抽象类Animal,包含获取动物类别和叫声的方法,然后分别创建了Cat、Dog和Goat类进行重写。在AnimalShoutTest2类中使用静态方法speak调用这些动物的叫声,展示了多态的运用。
摘要由CSDN通过智能技术生成

在做题之前先解释一下什么是多态(简短明了):

“类的多态”其实说的就是方法的多态,主要体现在方法的重载和重写。(其实并没有那么麻烦)

接下来看题目:

设计一个动物发生模拟器,用于模拟不同动物的叫声。比如狮吼、虎啸、狗旺旺、猫喵喵……。
定义抽象类Animal,包含两个抽象方法:获取动物类别getAnimalClass()、动物叫shout();
然后基于抽象类Animal定义狗类Dog、猫类Cat和山羊Goat,用getAnimalClass()方法返回不同的动物类别(比如猫,狗,山羊),用shout()方法分别输出不同的叫声(比如喵喵、汪汪、咩咩)。
最后编写AnimalShoutTest类测试,输出:
猫的叫声:喵喵
狗的叫声:汪汪
山羊的叫声:咩咩

其中,在AnimalShoutTestMain类中,用speak(Animal animal){}方法输出动物animal的叫声,在main()方法中调用speak()方法,分别输出猫、狗和山羊对象的叫声。

请在下面的【】处添加代码。


public class AnimalShoutTest2 {
    public static void main(String[] args) {        
         Cat cat = new Cat();
         Dog dog = new Dog();        
        Goat goat = new Goat();
         speak(cat);
         speak(dog);
         speak(goat);
    }
    //定义静态方法speak()
    【】

}

//定义抽象类Animal
【】class Animal{
    【】
}
//基于Animal类,定义猫类Cat,并重写两个抽象方法
class Cat 【】{
    【】    
    【】
}
//基于Animal类,定义狗类Dog,并重写两个抽象方法
class Dog 【】{
    【】
    【】
}
//基于Animal类,定义山羊类Goat,并重写两个抽象方法
class Goat 【】{
    【】
    【】
}

输入样例:


输出样例:

猫的叫声:喵喵
狗的叫声:汪汪
山羊的叫声:咩咩

 简单剖析一下此题:

在不理解“多态”时,想要做出此题还是有难度的(对于小白来说)。上面也解释了什么是“多态”,从定义角度理解会简单许多。

其中,题目要求的三个动物类有异曲同工之妙,写出来一个,其他的也都会写了(直接ctrl+c/v)。

话不多说,直接上代码(诸多细节请看代码注释代码):

public class Main {
    public static void main(String[] args) {
        Animal cat = new Cat();
        Animal dog = new Dog();
        Animal goat = new Goat();
        speak(cat);//由于这里的speak方法并没有返回值,所以是void类型
        speak(dog);
        speak(goat);
    }

    //定义静态方法speak(),这里直接按题目要求即可
    //Animal animal这里的意思是创建一个动物的对象,将上面传入的动物类别与子类对应后输出
    public static void speak(Animal animal) {
        System.out.println(animal.getAnimalClass() + "的叫声:" + animal.shout());
    }
}

    //定义父类Animal
    abstract class Animal {
        //按要求写抽象方法,以下就是标准的写发(不用加大括号)
        abstract public  String getAnimalClass();
        abstract public  String shout();
    }

    
    //定义猫类,并重写方法实现多态(既方法的多态)
    class Cat extends Animal {

        //@Override是在重写方法是很重要的一个语法,必须写
        @Override
        public String getAnimalClass()
        {
            return "猫";
        }
        @Override
        public String shout()
        {
            return "喵喵";
        }

    }

     //定义一个狗类,和猫类一样
     class Dog extends Animal {

         @Override
        public String getAnimalClass()
        {
            return "狗";
        }
        @Override
        public String shout()
        {
            return "汪汪";
        }
    }

     //定义一个山羊类,和上面一样
     class Goat extends Animal{

         @Override
        public String getAnimalClass()
        {
            return "山羊";
        }
        @Override
        public String shout()
        {
            return "咩咩";
        }
    }

完成收工,good!

虽然“天不生无用之人,地不长无名之草”。但仍谨记“冰冻三尺,非一日之寒”。

执长剑纵马,执妙笔生花,我王某人在此邀请诸位与我共身!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

惊骇世俗王某人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值