老师帮忙检查下

来源: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语句中,不需要创建对象后,再进行向上转型,可以直接通过多态的方式,父类的引用指向子类对象,然后将当前的对象存入当前数组中。

具体如下:


http://img.mukewang.com/climg/5d8b05680962043706420830.jpg

修改后的代码如下:

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();

		}

	}

}

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

0

0 学习 · 11489 问题

查看课程