接口不是要实现后才能使用吗?下面代码,为什么能通过编译呢?
import java.util.*;
class IteratorTest
{
public static void main(String[] args)
{
String[] strs={"one","two","three"};
List<String> l=Arrays.asList(strs);//就是这句话
System.out.println(l);
}
}
我认为,List是一个接口,这段代码通过了编译,就是说Arrays.asList(strs)返回的是一个实现了List接口的类的对象,但不知道是哪个。
我帮你看了下java的API
asListpublic static <T> List<T> asList(T... a)
- 返回一个受指定数组支持的固定大小的列表。(对返回列表的更改会“直写”到数组。)此方法同 Collection.toArray 一起,充当了基于数组的 API 与基于 collection 的 API 之间的桥梁。返回的列表是可序列化的,并且实现了 RandomAccess。
此方法还提供了一个创建固定长度的列表的便捷方法,该列表被初始化为包含多个元素: List stooges = Arrays.asList("Larry", "Moe", "Curly");
- 参数:
- a - 支持列表的数组。
- 返回:
- 指定数组的列表视图。
- 另请参见:
- Collection.toArray()
- 接着我看了下
- public interface RandomAccess
List 实现所使用的标记接口,用来表明其支持快速(通常是固定时间)随机访问。此接口的主要目的是允许一般的算法更改其行为,从而在将其应用到随机或连续访问列表时能提供良好的性能。
不能看出list实现了RandomAccess
Arrays.asList(strs)返回的RandomAccess
用子类new出父类当然就没问题
这个问题告诉你要学看API
List<String> l=Arrays.asList(strs);
我也是菜B一个呵呵 说错了别见怪 asList 是一个static 方法 是可以通过类名直接调用的 也就是说可以不用实例化一个类对象 了解? <String> 这个是代表泛型的意思 。。。。。
编译看的是双方面,=号左边是通常是被继承类,=号右边是继承类
List中存在asList该方法,而ArrayList中也有asList方法当然可以通过
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息