java泛型和繼承問題


先讓我們看下這段代碼:

List<String> ls = new ArrayList<String>(); // 1
List<Object> lo = ls; // 2 

第一行是合法,問題出現在第二行上,這里有個問題:List<String> 是 List<Object> 的子類嗎?或者說它倆是可以直接等價的嗎?,大多數人會回答說“當然了!”。

 

好的,我們先假設第二行沒問題,那我們再看看下面代碼:

lo.add(new Object()); // 3 : lo是指向Object的集合,那么向里面放“Object”實例,是允許的。
String s = ls.get(0); // 4: 如果第二行成立,那么此時ls也是指向了“Object集合”的,但是ls的聲明是“List<String>(指向String集合)”,那么此時ls取出來的是Object呢?還是String?

第三行中,我們向 lo 插入一個 Object實例。那這時候的 ls 就不再是僅持有String類型的List集合了。當我們從 ls 里面取出一個對象賦值給String s 時,java會給我們一個警告!

所以在上面提出的問題,我們的java是不允許的(即:第二行編譯時期就已經報錯了)。回答是NO.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM