首页 > 解决方案 > Child[] 不能传递给接受 Parent[] 的方法。为什么?

问题描述

为什么将 Child[] 传递给接受 Parent[] 的方法时出现编译错误?

但是,我可以定义 Parent[] 的变量并为其赋值 Child[]。

Kathy Sierra Book Generics 一章说它应该可以正常工作。

package com.collections;

import java.util.List;
import java.util.ArrayList;

class AnimalDoctor{
    public void checkAnimals(Animal[] animals){
        for(Animal a: animals){
            a.check();          
        }
    }
}
abstract class Animal {
    public abstract void check();
}
class Dog {
    public void check(){
        System.out.println(" Check Dog");
    }
}
class Cat {
    public void check(){
        System.out.println(" Check Cat");
    }
}
class Bird {
    public void check(){
        System.out.println(" Check Bird");
    }
}

public class TestGenerics {

    public static void main(String[] args){ 
        class Parent{}
        class Child extends Parent{}
        Parent[] array = new Child[11];                 //no error in assigning array of child elements to Parent[]

        Dog[] dogs = { new Dog(), new Dog()};
        Cat[] cats = { new Cat(), new Cat(), new Cat()};
        Bird[] birds = {new Bird()};

        AnimalDoctor doctor = new AnimalDoctor();
        doctor.checkAnimals(dogs);      //compilation error - why?
        doctor.checkAnimals(cats);      //compilation error - why?
        doctor.checkAnimals(birds);     //compilation error - why?
    }
}

标签: javaarrayspolymorphism

解决方案


DogCat, 和Bird类 不见了extends Animal


推荐阅读