༄༊࿆水下月ོྂཾ࿆࿐ 2023-03-25 16:05 采纳率: 98%
浏览 214
已结题

动物发声模拟器(多态)

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

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

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


```java
//动物发生模拟器.  请在下面的【】处添加代码。
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 【】{
    【】
    【】
}

img


以下是我的代码:




```java

public static void main(String[] args) {
        // TODO 自动生成的方法存根
        Cat cat = new Cat();

        Dog dog = new Dog();        

       Goat goat = new Goat();

        speak(cat);

        speak(dog);

        speak(goat);

   }

   //定义静态方法speak()

   public static void speak(Animal animal){
       System.out.println(animal.getAnimalClass()+"的叫声:"+animal.shout());

}

//定义抽象类Animal

abstract class Animal{

   public abstract String getAnimalClass();
   public abstract String shout();

}

//基于Animal类,定义猫类Cat,并重写两个抽象方法

class Cat extends Animal{

   public String getAnimalClass(){
       return "猫";
   }
   public String shout(){
       return "喵喵";
   }
  
}

//基于Animal类,定义狗类Dog,并重写两个抽象方法

class Dog extends Animal{

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

}

//基于Animal类,定义山羊类Goat,并重写两个抽象方法

class Goat extends Animal{

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

img


这一行为什么出现这样的错误,应该怎么修改?

  • 写回答

2条回答 默认 最新

  • 成都渔民 2023-03-25 17:15
    关注

    因为你使用了内部类,在外部使用时,就需要先new外部类再new内部类,这种用法其实是不推荐的。如果一定要这样用,可以如下:

    public class TestAnimal {
    
    
        //定义静态方法speak()
    
        public static void speak(Animal animal){
            System.out.println(animal.getAnimalClass()+"的叫声:"+animal.shout());
    
        }
    
    //定义抽象类Animal
    
        abstract class Animal{
    
            public abstract String getAnimalClass();
            public abstract String shout();
    
        }
    
    //基于Animal类,定义猫类Cat,并重写两个抽象方法
    
        class Cat extends Animal{
    
            public String getAnimalClass(){
                return "猫";
            }
            public String shout(){
                return "喵喵";
            }
    
        }
    
    //基于Animal类,定义狗类Dog,并重写两个抽象方法
    
        class Dog extends Animal{
    
            public String getAnimalClass(){
                return "狗";
            }
            public String shout(){
                return "汪汪";
            }
    
        }
    
    //基于Animal类,定义山羊类Goat,并重写两个抽象方法
    
        class Goat extends Animal{
    
            public String getAnimalClass(){
                return "山羊";
            }
            public String shout(){
                return "咩咩";
            }
        }
    
        public static void main(String[] args) {
            // TODO 自动生成的方法存根
            Cat cat = new TestAnimal().new Cat();
    
            Dog dog = new TestAnimal().new Dog();
    
            Goat goat = new TestAnimal().new Goat();
    
            speak(cat);
    
            speak(dog);
    
            speak(goat);
    
        }
    
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月27日
  • 已采纳回答 3月27日
  • 创建了问题 3月25日

悬赏问题

  • ¥20 神经网络Sequential name=sequential, built=False
  • ¥16 Qphython 用xlrd读取excel报错
  • ¥15 单片机学习顺序问题!!
  • ¥15 ikuai客户端多拨vpn,重启总是有个别重拨不上
  • ¥20 关于#anlogic#sdram#的问题,如何解决?(关键词-performance)
  • ¥15 相敏解调 matlab
  • ¥15 求lingo代码和思路
  • ¥15 公交车和无人机协同运输
  • ¥15 stm32代码移植没反应
  • ¥15 matlab基于pde算法图像修复,为什么只能对示例图像有效