java什么是“接口”以及如何针对它进行编程?
ArrayList<Class> name = new ArrayList<Class>(#)
昨天有人告诉我,这样的做法很糟糕,我应该“针对接口”编程,比如:
List<Class> name = new ArrayList<Class>(#)
他是什么意思
你可以在下面搜索框中键入要查询的问题!
ArrayList<Class> name = new ArrayList<Class>(#)
昨天有人告诉我,这样的做法很糟糕,我应该“针对接口”编程,比如:
List<Class> name = new ArrayList<Class>(#)
他是什么意思
# 1 楼答案
ArrayList
实现List
。因此,出于一些原因,最好使用List
。例如,如果您希望在将来更改列表的类型(例如,您决定使用LinkedList
、Stack
或Vector
),则只需更改赋值的右侧,其余代码即可正常工作,保持不变# 2 楼答案
这是创建ArrayList的多态方法。List是ArrayList的超级类型。 这样创建arraylist的优点是:
您可以稍后引用相同的列表来创建LinkedList
name=新建链接列表(#)
# 3 楼答案
无需透露您使用的列表的具体实现
唯一可用的方法是来自接口的方法。从技术上来说,这并不重要,但这是一个好习惯。代码更干净,更易于维护
# 4 楼答案
该代码段中的“接口”是
List
比ArrayList
更抽象的类列表将由其他一些类实现,如ArrayList、LinkedList等
通过使用接口来声明
name
,那么name
的用户就不必知道name
实际上是哪种类型的列表,如果您决定将来使用不同类型的列表,您可以不必在代码中更改很多位置# 5 楼答案
理想情况下,您希望使用集合的接口,而不是集合变量和返回值的实现。在你的例子中,这不是什么大问题。更有用的是在编写方法时:
通过使用
List<String>
和不使用ArrayList<String>
,这个方法可以选择一个不同的列表来使用(例如,它可能会更改为LinkedList),但是API的约定不会更改,所以所有调用代码仍然可以工作,即使该方法现在返回不同类型的列表# 6 楼答案
In接口定义了可用的方法,所以当编写类来实现接口时,它必须在接口中定义方法。(可能还有其他方法)
假设您编写了一个其他人将使用的类,它有一个如下方法:
当其他人编写代码来使用你的类时,你并不关心他们使用什么类型的列表来调用你的方法。所有这些都是有效的:
他们可以自由选择任何适合自己目的的列表类型(实现)