List是一个接口,而ListArray是一个类。
ListArray继承并实现了List。
所以List不能被构造,但可以向上面那样为List创建一个引用,而ListArray就可以被构造。
List list = new ArrayList();这句创建了一个ArrayList的对象后把上溯到了List。此时它是一个List对象了,有些ArrayList有但是List没有的属性和方法,它就不能再用了。
而ArrayList list=new ArrayList();创建一对象则保留了ArrayList的所有属性。
也就是说List list创建的list对象只有List接口所提供的功能而没用ArrayList除接口外的额外功能吗?
那如果这样呢,假如List跟ArrayList是父子类关系,用List list = new ArrayList()方式创建的就是一个父类对象?
我原来一直以为的是new ArrayList()代码创建了一个ArrayList对象,而前面的变量里面存的只是这个新对象的地址,指向了这个对象,所以他们在本质上是相同的
List arr = new ArrayList();
如果你要是想用父类引用变量arr调用子类ArrayList的特有方法时,就必须强转,Arraylist al=(List)arr,这样才可以直接调用子类的特有方法
ArrayList arr = new ArrayList();
建立的是子类自己的应用变量,可以直接调用自己的方法,不需要强转