java 多态 泛型_java泛型多态性

在下面的代码中

public class Animal {

public void eat() {

System.out.println("Animal eating");

}

}

public class Cat extends Animal {

public void eat() {

System.out.println("Cat eating");

}

}

public class Dog extends Animal {

public void eat() {

System.out.println("Dog eating");

}

}

public class AnimalFeeder {

public void feed(List animals) {

animals.add(new Cat());

animals.forEach(animal -> {

animal.eat();

});

}

public static void main(String args[]){

List a = new ArrayList();

a.add(new Cat());

a.add(new Dog());

new AnimalFeeder().feed(a);

/* List dogs = new ArrayList<>();

dogs.add(new Dog());

dogs.add(new Dog());

new AnimalFeeder().feed(dogs); // not allowed

*/

}

}

我知道feed (List animals) 方法不能传递 List, List 等 . 如果允许 List ,那么也可以添加 animals.add(new Cat()); ,这是不可取的,因为在运行时类型擦除 . 所以只允许 List .

但是,我可以做到以下几点

List a = new ArrayList();

a.add(new Cat());

a.add(new Dog());

and still call new AnimalFeeder().feed(a);

当我运行程序时,它给了我

Cat eating

Dog eating

Cat eating

我对多态通用概念的理解是“我们希望我们的 List 只接受 List ,并且该列表仅包含动物,而不包含猫或狗,换句话说只包含动物” . 不想要任何其他包含狗或猫的东西吗?是对的吗?如果是的话,为什么我允许传递包含狗,猫等的 List . 这与传递(假设允许) List 然后将 new Cat() 添加到狗列表不一样吗?

我希望我的问题很明确 .

但我能找到问题的答案吗?

谢谢,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值