为什么这个声明在Java中是正确的

时间:2016-07-03 07:34:44

标签: java list class interface

我是Java的新手,我在这里有很大的困惑。这怎么可能

List<String> list = new ArrayList<String>();

List是一个接口,它是如何拥有一个类的ArrayList。

2 个答案:

答案 0 :(得分:0)

任何类都可以包含其后继者,因为子类始终包含所有父类,并且可以包含额外数据。示例:

    class Parent {
    String someField;
    }

    class Child extends Parent {
    //Here we can access someField field
    Long anyAnotherField;
    }

在Java中,没有多重继承(A类只能扩展一个类)。但是有一个接口,类可以继承任意数量的接口。如果您看到文档,则可以看到interface Collectioninterface List extends Collectionclass ArrayList implementing List。因此,您可以将ArrayList放入List<T>List(不带参数),CollectionObject(在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 ;使用的是ArrayListLinkedList s或任何其他具体类型

在这种情况下,它具有接口,但同样的概念也适用于对象类型层次结构。如果您有类Animal,则可能有一个更具体的子类(Dog)。任何适用于Animal类型的内容都可以与Dog一起使用,因为Dog Animal