结果输出不对 求解答
public class Test {
public static void main(String[] args) {
//生成父类对象数组,数组长度为5
Animal ani[]=new Animal[5];
//产生随机数,随机产生三种具体子类的实例
for(int i=0;i<ani.length;i++) {
//随机生成数字方法0~3
int number=(int)Math.random()*3;
if(number==0){
Animal cat=new Cat();
ani[i]=cat;
}else if(number==1) {
Animal dog=new Cat();
ani[i]=dog;
}else if(number==2) {
Animal sheep=new Cat();
ani[i]=sheep;
}
}
//循环输出,循环体中每个对象分别调用cry()方法。
for(int i=0;i<ani.length;i++) {
if(ani[i] instanceof Cat) {
Cat temp=(Cat)ani[i];
temp.cry();
}else if(ani[i] instanceof Dog) {
Dog temp=(Dog)ani[i];
temp.cry();
}
else if (ani[i] instanceof Sheep){
Sheep temp=(Sheep)ani[i];
temp.cry();
}
}
}
}
public class Sheep extends Animal{
//重写父类的方法cry(),要求输出信息“小羊的叫声:咩咩咩~~~”
public void cry() {
System.out.println("小羊的叫声:咩咩咩~~~");
}
}
public class Dog extends Animal{
//重写父类cry()方法:输出信息为“小狗的叫声:汪汪汪~~~”
public void cry() {
System.out.println("小狗的叫声:汪汪汪~~~");
}
}
public class Cat extends Animal{
//重写父类cry()方法,输出信息为“小猫的叫声:喵喵喵~~~”
public void cry() {
System.out.println("小猫的叫声:喵喵喵~~~");
}
}
public class Animal {
//属性:kind(种类)
private String kind;
public Animal(){
}
//创建带参(king为参数)构造函数
public Animal(String kind) {
this.setKind(kind);
}
//应用封装实现对私有属性的get/set操作
public void setKind(String kind) {
this.kind=kind;
}
public String getKind() {
return kind;
}
//创建成员方法cry():void
public void cry() {
}
}
输出的结果 5个全都是小猫喵喵喵 而且我看别人的测试语句里没有
Cat temp=(Cat)ani[i];
temp.cry();
按理来说没有这步不是不能调用 子类特有的方法吗
我的代码可以简化一下吗 谢谢
正在回答
- 参与学习 人
- 提交作业 7317 份
- 解答问题 14452 个
想要入门学编程?多年一直活跃在编程语言排行版前列的Java是一个很好的选择。本路径将从Java基础语法、面向对象、常用工具类三部分,为你开启软件开发的大门!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星