初始化时你称之为超类和子类?

List list = new ArrayList(); 

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

List是引用和ArrayList的类吗?

如果他们是相同的,他们会被称为别的东西:

 ArrayList list = new ArrayList(); 

List是一个界面。 ArrayList是它的一个实现。 它们都不是另一个的超类或子类。

该声明分为三个部分:

  1. 命名参考( list
  2. 编译时,引用的静态类型( List
  3. 运行时,引用的动态类型( ArrayList

无论您如何修改编译时类型,每个部分都将保留其角色。

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

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

区别:

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

第一个优点:

即使您将实现更改为:

 List list = new LinkedList(); 

要么

 List list = new Vector(); 

你不必改变你的代码。