2012-02-16 39 views
7

Là một C++ thuở trước tôi đã quản lý để giải quyết vấn đề của tôi nhưng tôi không thể quấn quanh đầu tôi các cơ chế Java cơ bản ở đây:Java Danh sách vs ArrayList

Vector<Object> x = new Vector<Object>();  // OK 
ArrayList<Object> y = new ArrayList<Object>(); // OK 
List<Object> zzz = new ArrayList<Object>();  // OK solves problem below but question remains 
List<Object> z = new List<Object>();   // WHY? Compiler error: Cannot instantiate 

Trả lời

14

List là một giao diện, phần nào giống như một lớp học với một số = 0 phương pháp trong C++. Bạn không thể khởi tạo nó.

Nhưng ArrayList<T> "kế thừa" List<T> (hoặc bằng thuật ngữ Java, triển khai thực hiện), vì vậy các tham chiếu đó tương thích với nhiệm vụ.

+0

Nhờ tất cả các bạn. – Adam

+0

Các bạn thực sự nhanh chóng – Adam

+0

@Adam - hãy đợi cho đến khi bạn nhận được các ký tự đại diện trong các Generics Java! :) Câu trả lời mất nhiều thời gian hơn để xuất hiện. –

5

Danh sách là một giao diện, bạn không thể khởi tạo nó. ArrayList thực hiện List, vì vậy bạn có thể gán một cá thể ArrayList cho biến số List.

1

Danh sách không phải là lớp đó là Giao diện và bạn không thể khởi tạo đối tượng giao diện.

ArrayList là lớp mà đã thực hiện giao diện Danh sách như vậy có thể có khả năng để nhanh chóng các đối tượng ArrayList và gán cho danh sách đối tượng

1

Các List là một giao diện. Bạn không thể tạo ví dụ về giao diện sử dụng toán tử new. Đó là lý do tại sao dòng List<Object> z = new List<Object>(); có lỗi. Chỉ các lớp có thể được khởi tạo.

0

Listinterface và không thể khởi tạo giao diện.

Được sử dụng để triển khai đa hình. tức là tham chiếu về loại giao diện có thể chứa đối tượng của bất kỳ lớp nào mà implements nó.

List<Object> zzz = new ArrayList<Object>(); 

hoạt động, gây ra Danh sách thực hiện ArrayList.

1

"Giao diện" giống như giao thức mà đối tượng phải tuân thủ.

+0

Cách tiếp cận thú vị để sử dụng các giao thức như một sự tương tự. Mặc dù một chút văn bản nhiều hơn những gì "nó" là và những gì không có thể có những điều rõ ràng hơn một chút. –

+1

Tôi chưa bao giờ nghe giao thức trong ngữ cảnh này. Nhưng tôi hiểu ý anh là gì. Tôi thích hợp đồng thời hạn: http://en.wikipedia.org/wiki/Design_by_contract – Adam

+0

@Adam Tôi đồng ý, hợp đồng là một từ tốt hơn. – Benjamin

2

Có. Vì Danh sách là Giao diện và trong Java, bạn không thể khởi tạo Giao diện. Bạn chỉ có thể khởi tạo một lớp học.

ArrayList là một lớp đang triển khai Danh sách <> đó là lý do bạn có thể khởi tạo nó. :)