结果输出不对 求解答

结果输出不对 求解答

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

按理来说没有这步不是不能调用 子类特有的方法吗 

我的代码可以简化一下吗 谢谢

正在回答

登陆购买课程后可参与讨论,去登陆

3回答

你实例的对象new的都是Cat()

chrismorgen 2018-06-02 16:14:12

结果相同时因为你创建的都是Cat类的实例,修订之后的代码如下图。祝学习愉快~

http://img1.sycdn.imooc.com//climg/5b1251de0001955702410334.jpg

好帮手慕雪 2018-06-01 18:31:38

int number=(int)Math.random()*3; 永远是0。因为(int)与Math.random()先结合的。你得改成int number=(int)(Math.random()*3);祝:学习愉快

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师