日期:2014-05-20  浏览次数:20804 次

关于接口的一点疑问
我在书上看到说接口是不允许产生对象的,但有时候看到诸如“List l;”之类的语句,而容器List就是一个接口,它为什么能定义对象呢?请指教。

------解决方案--------------------
但是请你注意了
这个l有new过么?没有吧

比如某方法:fun(List l){.......}
又有某类 class classABC implements List{.....}

真正使用时传递的参数是实现这个接口的类fun(classABC)

或者List l=new classABC();
------解决方案--------------------
List l,这里的l,是个变量,而不是对象,所谓的对象,是在内存中占有空间的。
如果只List l,那么,不会为l分配内存空间,只会把这个l放到堆栈中,一旦把一个实例化的对象,赋值给了l.
l就指向了那个实例化的对象,而这个实例化的对象,是占有内存空间的。
类似的还有:
Map map=mew HashMap();
这是一个很常用的用法。Map是个接口,声明了个变量map,是Map类型,然后,new 一个HashMap(),new 了之后,内存
中就有这么一个HashMap对象了,内存空间也按照HashMap的默认大小分配了,然后通过= ,把这个变量map指向了刚new
出来的HashMap对象。
还例如:
Map map1=new TreeMap()

------解决方案--------------------
多态.
------解决方案--------------------
List list = new ArrayList();
------解决方案--------------------
Think in java 惹得货 万物皆对像