Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 具有列表和arrayList的多态性_Java_Generics_Polymorphism - Fatal编程技术网

Java 具有列表和arrayList的多态性

Java 具有列表和arrayList的多态性,java,generics,polymorphism,Java,Generics,Polymorphism,我有下一个 public interface MyInterface{} public class ClassA implements MyInterface(){} public class ClassB extends ClassA{} 理论上,对象B的有效引用类型如下: MyInterface myIn = new ClassB(); ClassA o1 = new ClassB(); ClassB o2 = new ClassB(); Object o3 = new ClassB()

我有下一个

public interface MyInterface{}
public class ClassA implements MyInterface(){}
public class ClassB extends ClassA{}
理论上,对象B的有效引用类型如下:

MyInterface myIn = new ClassB();
ClassA o1 = new ClassB();
ClassB o2 = new ClassB(); 
Object o3 = new ClassB(); 
如果我想做这样的事。。。
List o1=new ArrayList()

我得到一个编译错误。 有什么想法吗?

一个
ArrayList
只能包含
ClassB
的实例或
ClassB
的子类

另一方面,
列表
还可以包含
ClassA
的实例(不一定是
ClassB
的实例)和实现
MyInterface
的任何其他实例

因此,您不能将
数组列表
分配给
列表
变量

如果希望
o1
列表包含任何
MyInterface
实例,则应为其分配一个
ArrayList


如果希望
o1
仅包含
ClassB
的实例,请将其类型更改为
List

泛型在编译时工作,因此
ArrayList()
中的
泛型
非常不必要。您将看到更重要的
generic
List
,因为这定义了编译时的
generic
列表。作为一个侧节点,这也是为什么JDK1.7在初始化
列表时引入空
菱形操作符的原因。例如,可以忽略右侧的
泛型
简单。类B的所有对象都是类a的对象,因此也是实现接口的对象。事实上,如果我尝试这样做,我的接口o1=newclassb();它编译ok@silviaDominguez但并非所有的ClassA对象都必须是ClassB的对象。@silviaDominguez
ClassB
实现了
MyInterface
,因此您可以进行该赋值。但是,
ArrayList
不实现
List
——它实现
List
。并且
List
不是
List
的子接口,不能分配给这种类型的变量。@因此,尽管ArrayList实现了List,但我在这里不能使用多态性,对吗?