2 sinat 25136209 sinat_25136209 于 2017.01.14 19:04 提问

在非父子类关系中是否存在类似与父类引用指向子类对象的情况?

举个例子定义了一个list集合

 list<test> aa=new arraylist<test>();

其中test是个类
里面有a和b两个私有(int型的)变量,然后又有参构造和无参构造以及get,set方法。
现在已经往aa集合中添加了元素aa.add(new(1.2)).
然后

 test bb=aa.get(0);     //可能问了一个挺傻逼的问题。。

我的问题是:上面我单独列出来的语句,为啥能等式成立?我知道aa.get(0)它的类型
是test类型的,但是能不能用用父类引用指向子类对象这个来解释这个??
虽然这里并没有什么继承关系。。

5个回答

u010528826
u010528826   2017.01.14 22:01

List 是个接口:public interface List extends Collection
ArrayList 是它的一个实现类:public class ArrayList extends AbstractList implements List, RandomAccess, Cloneable, java.io.Serializable**
这里实际是接口引用指向其实现类。
跟父类引用指向子类对象一个道理

erdanhei
erdanhei   2017.01.14 21:03

test bb=aa.get(0); aa.get()使用的是List的方法图片说明,得到存入的第一个test类型对象,所以相等,api上讲的很清楚

sinat_25136209
sinat_25136209   2017.01.14 22:16

我想问的是test bb=aa.get(0);能不能用父类引用指向子类对象这个来解释,而不是问get是个什么方法。。我知道get方法,我也知道list集合。。。
test bb=aa.get(0);这个只是我举的一个例子,还有类似的比如说安卓的调用布局填充器的View v=view.inflate(xxx)这样的情况

sinat_25136209
sinat_25136209 可能我没说清我想说的,但是有木有前辈领会到那个意思的
11 个月之前 回复
u010528826
u010528826   2017.01.14 22:51

test bb=aa.get(0);能不能用父类引用指向子类对象这个来解释?不能。
因为这里使用的是泛型,跟多态没关系。你在声明List的时候已经告诉list要往里面方Test类型的数据,所以aa.get(0)返回直接就是Test类型。

如果你改成这样:List aa=new arraylist();,那么 Test bb=aa.get(0);就会不成立,需要强转。

这里的核心是泛型,而不是多态。所以不能用父类引用指向子类对象来解释。

不知道这个回答是否跟你想问的一样

dabocaiqq
dabocaiqq   2017.01.14 22:50
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!