老师帮忙检查下
来源:3-16 编程练习
慕沐2169693
2019-09-25 11:28:35
public class Animal {
private String kind;
public Animal() {
}
public Animal(String kind) {
this.setKind(kind);
}
public String getKind() {
return kind;
}
public void setKind(String kind) {
this.kind = kind;
}
public void cry() {
}
}
public class Cat extends Animal {
public void cry() {
System.out.println("小猫的叫声:喵喵喵~~");
}
}
public class Dog extends Animal {
public void cry() {
System.out.println("小狗的叫声:汪汪汪~~");
}
}
public class Sheep extends Animal {
public void cry() {
System.out.println("小羊的叫声:咩咩咩~~");
}
}
public class Test {
public static void main(String[] args){
Animal[] animal=new Animal[5];
for(int i=0;i<animal.length;i++) {
int n=(int)(Math.random()*3);
switch(n) {
case 0:
Cat temp=new Cat();
animal[i]=temp;
break;
case 1:
Dog temp1=new Dog();
animal[i]=temp1;
break;
case 2:
Sheep temp2=new Sheep();
animal[i]=temp2;
break;
}
animal[i].cry();
}
}
}
1回答
好帮手慕酷酷
2019-09-25
同学,你好!程序完成得很好,但是还可以进行代码优化,思路如下:
在Test类的case语句中,不需要创建对象后,再进行向上转型,可以直接通过多态的方式,父类的引用指向子类对象,然后将当前的对象存入当前数组中。
具体如下:

修改后的代码如下:
public class Test {
public static void main(String[] args) {
Animal[] animal = new Animal[5];
for (int i = 0; i < animal.length; i++) {
int n = (int) (Math.random() * 3);
switch (n) {
case 0:
animal[i] = new Cat();
break;
case 1:
animal[i] = new Dog();
break;
case 2:
animal[i] = new Sheep();
break;
}
animal[i].cry();
}
}
}如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
相似问题