首先,为什么用ArrayList定义的也可以用List定义呢?
答:List 是ArrayList的父类,对于 A a = New A'();左边编译时检查,右边运行时检查,在结构上是符合逻辑的。我的理解是,实例拥有对类的实现要素,编译时检查是合理的,扩充的内容在运行时添加,不产生错误。 仅代表个人观点,针对这个说法要详细理解 请参考JAVA文档或权威参考书。
其次,建议用哪个?
答:个人建议用List 来定义,这个在早期的个人学习中尤其是缺乏项目的同学是不容易理解也比较容易忽略的。在代码行数、功能点少的项目中,对象的变动不大,与其他模块的耦合度也比较低,甚至没有,修改代码定义对其余代码影响不大。在使用点较多的情况下,用通用的类型List即使后续修改了实现类型比如ArrayList->LinkList,也能减少维护成本。