猿问

我想知道在这段代码中为什么子类Cat实例不能注入父类Animal[]数组中?

Animal父类

package com.imooc.Test;

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 this.kind;
    }
    
    //创建成员方法cry():void
    public void cry(){
    }
}

Cat子类

package com.imooc.Test;

public class Cat extends Animal {
    //重写父类cry()方法,输出信息为“小猫的叫声:喵喵喵~~~”
    public void cry(){
        System.out.println("小猫的叫声:喵喵喵~~~");
    }
}

Dog子类

package com.imooc.Test;

public class Dog extends Animal {
    //重写父类cry()方法:输出信息为“小狗的叫声:汪汪汪~~~”
    public void cry(){
        System.out.println("小狗的叫声:汪汪汪~~~");
    }
}

Sheep子类

package com.imooc.Test;

public class Sheep extends Animal {
    //重写父类的方法cry(),要求输出信息“小羊的叫声:咩咩咩~~~”
   public void cry(){
       System.out.println("小羊的叫声:咩咩咩~~~");
    }
}

测试代码

public class Test {

    public static void main(String[] args) {
        //生成父类对象数组,数组长度为5
        Animal[] animal = null;
        //产生随机数,随机产生三种具体子类的实例
        for(int i_1 = 0;i_1<6;i_1++){
            int x=(int)(Math.random()*3);
          
            animal[i_1] = new Cat();
            if(x == 0){ 
                animal[i_1] = new Cat();
            }
            else if(x == 1){
                animal[i_1] = new Dog();
                
            }
            else if(x == 2){
                animal[i_1] = new Sheep();
            }
        }
       //循环输出,循环体中每个对象分别调用cry()方法。
        for(int i_2 = 0 ; i_2<6 ; i_2++){
            animal[i_2].cry();
        }
    }
}

请多指教。

Ann_Zhang
浏览 1540回答 1
1回答
随时随地看视频慕课网APP

相关分类

Java
我要回答