這個問題在這里已經有了答案: List<Dog> 是 List<Animal> 的子類嗎?為什么 Java 泛型不是隱式多型的? (19 個回答) 1 小時前關閉。
我正在閱讀有關 Java 泛型的內容,以下部分似乎有問題:
public class Farm {
private List<Animal> animals;
public void addAnimals(Collection<Animal> newAnimals) {
animals.addAll(newAnimals);
}
}
farm.addAnimals(cats); // Compilation error
farm.addAnimals(dogs); // Compilation error
Cat 和 Dog 是 Animal 的子類。
為了使其作業,需要定義一個具有上限的通配符型別:
public void addAnimals(Collection<? extends Animal> newAnimals)
我不應該能夠互換使用子類和超類,而無需根據 Liskov 替換的定義設定上限:
可替換性是面向物件編程中的一個原則,它指出物件(例如類)和子物件(例如擴展第一個類的類)必須在不破壞程式的情況下可以互換。
uj5u.com熱心網友回復:
只有貓的集合不是任何動物集合的子類。
這和編譯錯誤是好事。否則,您可以宣告一個只有貓的集合,并在其中插入一條狗。麻煩接踵而至。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/390133.html
下一篇:排列陣列,使相鄰的空間更小
