我是Java的新手,我在这里有很大的困惑。这怎么可能
List<String> list = new ArrayList<String>();
List是一个接口,它是如何拥有一个类的ArrayList。
答案 0 :(得分:0)
任何类都可以包含其后继者,因为子类始终包含所有父类,并且可以包含额外数据。示例:
class Parent {
String someField;
}
class Child extends Parent {
//Here we can access someField field
Long anyAnotherField;
}
在Java中,没有多重继承(A类只能扩展一个类)。但是有一个接口,类可以继承任意数量的接口。如果您看到文档,则可以看到interface Collection
,interface List extends Collection
,class ArrayList implementing List
。因此,您可以将ArrayList
放入List<T>
,List
(不带参数),Collection
,Object
(在Java中,所有类都将Object作为父类)。 (还有很多其他的类,比如AbstractList,它只是一个例子)
答案 1 :(得分:0)
变量的类型和变量引用的对象的类型不需要相同,只要对象的类型与变量的类型兼容即可。那么兼容是什么意思?
这意味着对象的类型有&#34;是&#34;与变量类型的关系。 ArrayList<String>
&#34;是&#34; List<String>
,因为ArrayList
实现了List
接口。也就是说,ArrayList
具有List
定义的所有方法,并声明(通过说implements List
)它符合这些方法的定义。
这是面向对象编程中的一个基本概念,称为polymorphism。也就是说,我们可以说有一个名为List
的东西,我们可以编写适用于List
的代码,而不知道实际的List
s&#39 ;使用的是ArrayList
或LinkedList
s或任何其他具体类型。
在这种情况下,它具有接口,但同样的概念也适用于对象类型层次结构。如果您有类Animal
,则可能有一个更具体的子类(Dog
)。任何适用于Animal
类型的内容都可以与Dog
一起使用,因为Dog
是 Animal
。