我就说其中一种好处吧(接口和抽象类差不多)。
例如:
List<String> list = new ArrayList<String>();
list.add("");
list.……
如果有一天你想让list的实际类型改为LinkedList,只要改new ArrayList为new LinkedList这一处就行。
酱紫:List<String> list = new LinkedList<String>();
如果你原来写的是实体类。
ArrayList<String> list = new ArrayList<String>();
你想把它改为
LinkedList<String> list = new LinkedList<String>();
那么你得检查所有用到了list的地方,是否有ArrayList支持而LinkedList不支持的方法,不然会报错。
而原来用向上转型为List的写法则不用去检查,因为向上转型时,只能用到List有的方法(实际类型ArrayList的方法在你最开始写时就用不了,所以后面改动也不会遇上)