黑马程序员技术交流社区

标题: 问问集合的那个多态! [打印本页]

作者: 深知一生短暂    时间: 2013-9-10 12:51
标题: 问问集合的那个多态!
List<String> ls=new ArrayList<String>();
想问问大家,老师不是说到这样写很高级吗?但我不明白高级在哪里?
如上,如果将子类提升为接口List,那么子类的特有方法不就是不能用了吗? 都变成只能用共性方法了?
我想详细知道这样写有什么好处
作者: mo﹎雲℡    时间: 2013-9-10 13:01
List<String> ls=new ArrayList<String>();
这样的写法是多态的体现。
你的问题:如果将子类提升为接口List,那么子类的特有方法不就是不能用了吗? 都变成只能用共性方法了?
对于你的问题,首先你先查看一下文档,看看List类中的方法的数量和名称,然后对比一下ArrayList类中的方法的数量和名称,你就知道了。ls 可以使用List集合中的方法,如果你想使用子类中的方法的时候,你就可以强制转换成子类的类型。就可以使用子类的方法了。
这样ls集合,list的方法和ArrayList的方法 都能使用。你说比之前
ArrayList<String> ls=new ArrayList<String>();
这样使用是否高级呢?
作者: 深知一生短暂    时间: 2013-9-10 13:06
mo﹎雲℡ 发表于 2013-9-10 13:01
List ls=new ArrayList();
这样的写法是多态的体现。
你的问题:如果将子类提升为接口List,那么子类的特有 ...

张孝祥老师那的银行调度就是说我那样写,但他说提升后更高级!!!我清楚用子类引用能用原有方法!!!就是不明白我上面写的为啥是更高级!

作者: 杨修    时间: 2013-9-10 15:16
List<String> ls=new ArrayList<String>();
第一:这种写法使多态的体现,多态的好处还包括指向他的其他子类,就算需要使用子类特有方法,强转一下什么都解决了。
第二:这里面使用了泛型,定义了<String>泛型之后集合中就只能存储String类型的对象。这样就能把运行时期的问题转移到了编译时期。非String类型的对象一存进去就会出错的。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2