接口引用和具体类引用之间的区别

时间:2014-11-03 07:57:32

标签: java collections

我想问一个关于在java的Collections API中使用List的问题:

List <Integer> list = new ArrayList<>();
ArrayList<Integer> aList = new ArrayList<>();

我们可以使用其中任何一个来创建ArrayList的对象,这是创建ArrayList的更好方法,为什么?

4 个答案:

答案 0 :(得分:2)

第一个选项使代码的其余部分更加模块化,因为您可以通过更改单行代码来替换代码使用的List实现。

你只需要改变

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

List <Integer> list = new SomeOtherListImplementation<>();

将变量声明为ArrayList会将您的代码绑定到List接口的ArrayList实现。

但是,如果您的代码需要使用不属于List接口的ArrayList方法,则可能必须使用ArrayList变量。

答案 1 :(得分:0)

第一个案例称为programming to interfaces

如果您坚持使用接口编程并稍后实现您的程序,您可以将其更改为其他实现。

前者

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

如果你以第一种方式编码,那么当你需要改变时只需更改初始化部分的右手边即可完成,没有任何代码破坏且没有任何编译器错误。

答案 2 :(得分:0)

ArrayList<Integer> aList = new ArrayList<>();

如果稍后未修改变量aList,则上面的代码行是可以的。

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

但是如果你想为你的代码添加更多的灵活性,我会建议这样做,因为你可以稍后将列表变量声明为不同的List实现。

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

它不会破坏代码,因为它确保您只调用List接口定义的方法。

答案 3 :(得分:0)

第一种方法是模块化的。这是利用&#34; 基类指针可以指向派生类对象&#34;

的事实。

当我们传递论据时,这特别有用。比方说,

public void display(List<String> names);

LinkedList<String> names = new LinkedList<String>();
display(names);