初始化时你称之为超类和子类?
List list = new ArrayList();
在识别除超类和子类之外的部分时,List和ArrayList是什么?
List是引用和ArrayList的类吗?
如果他们是相同的,他们会被称为别的东西:
ArrayList list = new ArrayList();
List
是一个界面。 ArrayList
是它的一个实现。 它们都不是另一个的超类或子类。
该声明分为三个部分:
- 命名参考(
list
) - 编译时,引用的静态类型(
List
) - 运行时,引用的动态类型(
ArrayList
)
无论您如何修改编译时类型,每个部分都将保留其角色。
List
是一个接口; ArrayList
是该接口的实现。
在第一个示例中, List
是定义对象list
的引用类型的接口, ArrayList
是接口的实现,它是实际对象的类型。 在第二个示例中,对象及其引用都具有类型ArrayList
区别:
- 第一个,只能在列表对象上调用接口
List
方法。 多态性存在于此。 - 第二,可以在列表对象上调用
ArrayList
类的方法。
第一个优点:
即使您将实现更改为:
List list = new LinkedList ();
要么
List list = new Vector ();
你不必改变你的代码。