为了账号安全,请及时绑定邮箱和手机立即绑定

为什么不直接将courses创建为ArrayList类型的呢?

this.courses = new ArrayList<Course>()这里用ArrayList去实现List接口,为什么不直接将courses创建为ArrayList类型的呢?

正在回答

3 回答

List是一个接口,而ArrayList 是一个类。 ArrayList 继承并实现了List。
List list = new ArrayList();这句创建了一个ArrayList的对象后把上溯到了List。此时它是一个List对象了,有些ArrayList有但是List没有的属性和方法,它就不能再用了。而ArrayList list=new ArrayList();创建一对象则保留了ArrayList的所有属性。

为什么一般都使用 List list = new ArrayList() ,而不用 ArrayList alist = new ArrayList()呢? 
问题就在于List有多个实现类,如 LinkedList或者Vector等等,现在你用的是ArrayList,也许哪一天你需要换成其它的实现类呢?,这时你只要改变这一行就行了:List list = new LinkedList(); 其它使用了list地方的代码根本不需要改动。假设你开始用 ArrayList alist = new ArrayList(), 这下你有的改了,特别是如果你使用了 ArrayList特有的方法和属性。 ,如果没有特别需求的话,最好使用List list = new LinkedList(); ,便于程序代码的重构. 这就是面向接口编程的好处


以上回答来自百度知道http://zhidao.baidu.com/link?url=5BnCewQtw8nx7eY8RAwmVPvyxX3h4Mez2DyLmiWi-9GMDcOrf0A2NYNQ8RlsWJJ_A5Pq4s1WKAw0IuZWSEMO8K

1 回复 有任何疑惑可以回复我~
#1

天涯蝶舞 提问者

非常感谢!
2015-12-29 回复 有任何疑惑可以回复我~

父类指向子类,方便后期维护,项目经验啊。

0 回复 有任何疑惑可以回复我~

List list = new ArrayList<String>();

ArrayList<String> arrayList = new ArrayList<String>();

这样两种代码都是可以的。

其实楼主可以把你的代码都贴出来,这样看的别人看起来更容易看出错误.

0 回复 有任何疑惑可以回复我~
#1

天涯蝶舞 提问者

public class TestGeneric { /** * 带有泛型——Course,的List类型属性 */ public List<Course> courses; public TestGeneric() { this.courses = new ArrayList<Course>(); } 这个案例中他先创建了一个List类型的courses,随后在构造方法中又写了这一句this.courses = new ArrayList<Course>(),为什么他不直接创建一个ArrayList类型的courses,这样写是因为有其他考虑吗?
2015-12-28 回复 有任何疑惑可以回复我~
#2

还在2 回复 天涯蝶舞 提问者

List<> list = new Arraylist<>(); 具体的原因我也不是很清楚,我个人猜测其中一个原因是把方法的参数定义为这样的接口类型,这样无论传什么样的这个借口的具体实现类都可以直接拿来用,也就是多态!
2015-12-29 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

为什么不直接将courses创建为ArrayList类型的呢?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信