List list=某个方法返回的List集合 ;
然后就用list点出方法出来使用,我奇怪的是
List不是一个接口吗,怎么点出来的方法可以实现功能的,接口里面不是空吗?一般不都是要new 一个实现类出来的吗?就算可以
的话,它有这么多个实现类AbstractList, AbstractSequentialList, ArrayList, AttributeList,
CopyOnWriteArrayList, LinkedList, RoleList, RoleUnresolvedList, Stack,
Vector ,他用哪个的啊?其实这个问题只是以点盖面,也不是问List的问题,而是接口的问题,返回接收一个接口,然后可以用接口方法的问题,感觉很奇怪
然后就用list点出方法出来使用,我奇怪的是
List不是一个接口吗,怎么点出来的方法可以实现功能的,接口里面不是空吗?一般不都是要new 一个实现类出来的吗?就算可以
的话,它有这么多个实现类AbstractList, AbstractSequentialList, ArrayList, AttributeList,
CopyOnWriteArrayList, LinkedList, RoleList, RoleUnresolvedList, Stack,
Vector ,他用哪个的啊?其实这个问题只是以点盖面,也不是问List的问题,而是接口的问题,返回接收一个接口,然后可以用接口方法的问题,感觉很奇怪
没有说不new的,你自己看错了吧。不new的是static的,自动加载的
List接口里有很多方法,只是是抽象的而已.
哪来的?它不就是一个List的实现类吗?
2.方法只是返回了一个实现了List接口的实现类的一个实例,当然List list = xxxFunction();成立。
3.这里面也涵盖了一个思想和n多基础。楼主只要知道他给的是个list即可,所有list的实现遵循了同样的规范,而无须调用端知道具体的实现,List只是一套提供特定的一组服务的规范而已,面向接口的设计,可以让调用端专注于从接口获取服务,而楼主可以根据需要在日后轻松的更换接口的实现,而不用大改特改程序。
一般类不通过new是不能实例化的,不new的是static的,自动加载的
接口可以通过其实现接口的类来实例化,
建议看一看工厂类和抽象工厂类,就会明白其中的道理的
后面的list()部分,返回的对象,在内存中形成一个真正的你需要调用的方法和属性等的对象,然而它是由前面list指向的
1编译时多态:编译时动态重载;
2运行时多态:指一个对象可以具有多个类型,方法的覆盖
这样对于对象而言分为:
理解运行时多态:
Car c = new Bus();
Car编译时类型 编译时检查变量类型是否存在,是否有调用的方法
Bus运行时类型 实际运行是访问heep中的对象,调用实际的方法。
运行时多态是由运行时类型决定的
编译时多态是由编译时类型决定的
猫,小鸟,狗 都是动物,都可以安上动物的标签。
Interface Animal{}
Class Car implements Animal{}
Class Bird implements Animal{}
Class Dog implements Animal{}
方法中
Animal a = new Car();
Animal b = new Bird();
Animal c = new Dog();
运行时多态的三原则
1.对象不变;(改变的是主观认识)
2.对于对象的调用只能限于编译时类型的方法,如调用运行时类型方法报错。
在上面的例子中:Animal a=new Dog();对象a的编译时类型为Animal,运行时类型为dog。
注意:编译时类型一定要为运行时类型的父类或者同类型。
对于语句:Dog d=(Dog)a。将d强制声明为a类型,此时d为Dog(),此时d就可以调用运行时类型。注意:a和d指向同一对象。
3.动态类型判定实际调用的方法。即它调用覆盖后的方法。
List list = new ArrayList()hibernate中的createQuery的返回值是一个Query对象(query自己命的),通过query.list()可以将返回值转换成为List集合!
接口是一个蒙板--->当实际对象产生时,接口覆盖了实际对象的固有方法,保留了接口方法。限制了对象和方法列表的关系!!应该类似---盖住对象自身方法。使映射列表不具有那样的数据
映射列表
类对象-------方法地址
xxx@xxxx xxxx
xxx@xxxx xxxx
你可以具体看看xxx对应的类里面的getList方法,在这个方法里面肯定有new ArrayList(), 然后返回它的语句.
因此, 完全等价于 List list = new ArrayList();
一般类不通过new是不能实例化的,不new的是static的,自动加载的
接口可以通过其实现接口的类来实例化,
建议看一看工厂类和抽象工厂类,就会明白其中的道理的
这样的方法经常用到,比如你的方法需要返回一个装满重要数据的List实现类对象
List是一个接口,但是它内部不是什么也没有,是只定义了方法,而没有实现,具体实现是由子类完成