【问题标题】:What do you call the superclass and subclass when initializing? [duplicate]初始化的时候怎么称呼超类和子类? [复制]
【发布时间】:2016-05-10 04:03:25
【问题描述】:
List<String> list = new ArrayList<String>();

在识别超类和子类以外的部分时,什么是List和ArrayList?

List 是引用,ArrayList 是类吗?

如果它们是一样的,它们会被称为别的东西吗:

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

【问题讨论】:

  • 超类不必是接口,也可以是另一个类。您提供的重复链接涉及接口。
  • 在概念上是一样的。 ListArrayList 的超类型。而ListArrayList实现的接口(还有一堆实现)。使用这样的构造,您实际上是在执行所谓的“对接口进行编程”。因此链接的问题。

标签: java inheritance subclass superclass


【解决方案1】:

List 是一个接口。 ArrayList 是它的一个实现。两者都不是另一个的超类或子类。

【讨论】:

    【解决方案2】:

    此声明分为三个部分:

    1. 命名引用 (list)
    2. 编译时间,引用的静态类型 (List&lt;String&gt;)
    3. 运行时,引用的动态类型 (ArrayList&lt;String&gt;)

    无论您如何修改编译时类型,这些片段中的每一个都将保留它们的特性。

    List是一个接口; ArrayList 是该接口的实现。

    【讨论】:

      【解决方案3】:

      在第一个示例中,List 是定义对对象list 的引用类型的接口,ArrayList 是接口的实现,它是实际对象的类型。 在第二个示例中,对象及其引用的类型均为 ArrayList

      【讨论】:

        【解决方案4】:

        区别:

        • 第一个,列表对象只能调用接口List的方法。这里存在多态性。
        • 第二个,ArrayList类的方法可以在list对象上调用。

        第一种的优点:

        即使您将实现更改为:

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

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

        您不必更改其余代码。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-03-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-12-30
          • 1970-01-01
          • 2011-03-30
          相关资源
          最近更新 更多