java - 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?
}
}
解决方案
我Dog
的Cat
, 和Bird
类 不见了extends Animal
。
推荐阅读
- c# - Service Fabric 本地群集“无法将请求路由到...”-升级 Windows 2019 年 5 月 10 日之后
- javascript - 如何为按钮编写 onclick 以在特定页面上使用脚本
- xampp - 如何为 Xampp 启用 8080 端口?
- powershell - 管道两次调用相同的powershell函数,将无法识别第一次调用函数
- r - 根据向量值将空行添加到数据框中
- c# - 使用控制台应用程序c#从指定行读取文本文件列明智
- navigation - 样式化时的剃刀导航问题
- node.js - 如何在 Ubuntu LXC 容器中安装节点模块(express、typescript、ws 等)?
- java - 使用 Scala/Java API 根据外部数组的内容进行自定义排序
- bash - 读取/合并属性文件到 1 行,忽略 unix shell 中的注释