Tôi có câu hỏi về việc áp dụng đa hình: Giả sử tôi có một lớp Bird
và tôi có nhiều lớp mở rộng nó (như Pigeon
, Falcon
v.v.). Tiếp theo, tôi có một lớp học Cage
. Trong lớp học này, tôi muốn lập danh sách các loài chim sống trong lồng đó (chỉ có một loại chim có thể sống trong mỗi lồng).Khởi tạo danh sách đối tượng sử dụng đa hình
Do đó, tôi không biết loại mở rộng của danh sách (A Pigeon
? Hoặc có thể là Eagle
?), Điều duy nhất tôi biết là nó sẽ là Bird
.
Nếu Pigeon extends Bird
Sử dụng đa hình tôi có thể tuyên bố một con chim như: Bird tom = new Pigeon();
thay vì Pigeon tom = new Pigeon();
Vậy tại sao tôi không thể khởi tạo một cái gì đó như thế trong các nhà xây dựng: [...]
private List<Bird> birdList;
public Cage() {
this.birdList = new ArrayList<Pigeon>();
/* Instead of birdList = new ArrayList<Bird>(); */
}
Nếu bạn không thể làm điều đó, tôi có thể đạt được mục tiêu của mình theo cách khác không?
câu trả lời ngắn vì chúng không cùng loại. – xiaoyi
đọc chủ đề này http://stackoverflow.com/questions/2745265/is-listdog-a-subclass-of-listanimal-why-arent-javas-generics-implicitly-p –