问题
刚看到Linkedlist
,想到这个问题,
List<String> link = new LinkedList<>();
和
LinkedList<String> link2=new LinkedList<>();
这两种写法比起来,明显link2的方法更多,那多态有啥应用场景嘛,
一个父类Animal
, 一个子类cat
,子类继承了父类,并重写了里面的方法,
Animal a = new Cat()
,这个a
只能用Animal
里面的方法,想要用cat里面的方法的话还需要向下转型,多态的方式不是方法就变少了吗,直接
Cat a = new Cat()
方法不是多嘛
解决
请教了一下大佬,他是这么回我的
通常使用
List list = new ArrayList();
而不是使用
ArrayList list = new ArrayList();
我们知道List有多个实现类,除了ArrayList
,还有LinkedList
,Vector
等等,如果后续需要更换实现,那么改动明显小很多,通常来说,List
提供的接口已经够用了,这也是面向接口编程的典型应用,
到时候要是需要的话就直接向下转型到某个子类
还看到一个别样的解释,蛮有意思
在工作当中尽量面向抽象编程,不要面向具体编程。在上面实例中drive方法的参数Car相比于Benz和BMW更加抽象一些,就好比生活中,别人会问你会开车么,通常不会问你会开宝马车么?会开奔驰车么?由此可见形参写上Car,程序的扩展性更强了,只要是汽车都能传过来开动。