【发布时间】:2013-04-07 14:24:39
【问题描述】:
我在阅读 Java 文档时遇到了一个奇怪的案例。这是关于 Arrays.asList 方法的 Oracle 的 java 文档的链接,http://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html#asList(T...)
文档中有一个例子
List<String> stooges = Arrays.asList("Larry", "Moe", "Curly");
我的问题是,由于 List 是一个接口,为什么我们可以将 stooges 声明为“List”,而不是实现 List 的具体子类(例如 ArrayList 或 LinkedList)? 那么这是否意味着我们可以有一个接口类型的引用变量呢?我觉得这很奇怪,因为我一直认为接口只代表多态性,我们永远不应该真正使用接口类型变量。
谁能给我一些线索?
【问题讨论】:
-
we should never really use a interface type variable完全相反是正确的!!! -
我知道对于多态性,我们应该将函数参数和返回类型和数组类型声明为接口类型变量。但是对于我在问题中提到的情况,我很困惑..
-
java中的局部变量、函数参数和返回类型几乎没有区别。能够将对象视为接口是接口的主要特征之一。
-
@OsamaJaved - 小幅更正:“能够将对象视为接口的实例 ...”
-
@HotLicks 不错 :D