使用new声明具有不同实例化类型的变量

时间:2015-04-09 14:21:02

标签: java collections

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

我不明白为什么他们这样做,我的意思是他们可以使用,

List<String> c=new List<String>(); OR

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

这种语法的用法是什么以及如何使用它......

2 个答案:

答案 0 :(得分:1)

我们有一个List接口实际上很好。这样我们可以选择使用不同类型的列表(ArrayList,linkedlist等)并继承其中的常用方法。

例如,每个列表都需要添加和删除方法。但根据列表,实施将有所不同。 ArrayList将以不同于LinkedList的方式添加项目。

因此,List接口可以帮助Java编码器抽象列表之间的公共细节,这些列表稍后会有不同的实现。

我希望这会有所帮助。

答案 1 :(得分:0)

你可以这样看待它。接口List提供了每个列表实现的常用方法,而像ArrayList这样的具体类型提供了列表如何运行的特定行为。

因此,List<String> c = new ArrayList<String>();表示List的一般String个,其中包含add()clear()get()等方法,但其行为类似ArrayList

使用这样的interface可以在运行时切换该列表的行为。这意味着你可以这样做:

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

如果您从一开始就将list声明为ArrayList,则无法做到这一点。

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

这将生成编译器错误Type mismatch: cannot convert from LinkedList<String> to ArrayList<String>

为了更具技术性,interface定义了一个&#34;契约&#34;,这意味着实现该接口的每个类都必须提供其定义的方法。因此,如果您使用接口,则可以确保实现它的任何创建对象具有相同的常用方法,因为它们必须提交到&#34;合同&#34;。但是,该对象的行为以及提供的方法如何实现完全取决于您。