Tiger类是从Animal Class扩展而来的.
当我宣布:List<Animal> tiger = new ArrayList<Tiger>();.我会在编译时出错.
但是,我认为这条线对多态性来说是正确的.请问谁可以帮我解释一下.
你不能这样做
List<Animal> tiger = new ArrayList<Tiger>();
Run Code Online (Sandbox Code Playgroud)
在java中.左边的通用类型必须是非常相等(或者可能不必相等,如果通配符在游戏中 - ? extends T或者? super T)在右边是通用类型.
如果有可能那么就不可能将新Lion的列表添加到声明为Animals的列表中- 这没有任何意义.
你能做的是:
List<Animal> tigers = new ArrayList<Animal>();
tigers.add(new Tiger());
Run Code Online (Sandbox Code Playgroud)
(Animals的所有家庭,包括Tigers)
要么:
List<? extends Animal> tigers = new ArrayList<Tiger>();
tigers.add(new Tiger()); // Adding is immpossible now - list can be read only now!
Run Code Online (Sandbox Code Playgroud)
(只有子类Animal)- 列表现在只能读取!
| 归档时间: |
|
| 查看次数: |
1612 次 |
| 最近记录: |