返回类型多态是怎么实现的? 本帖最后由 owydeai 于 2015-01-25 01:00:42 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 返回类型不是Object吗?这个类型怎么能调用Dog独有的方法? 定义时指定了Dog类型,ArrayList<Dog> myLIst = new ArrayList<Dog>();get(0)不再返回Object,而是直接返回的Dog类型对象。看JDK源码,这是个泛型方法: public E get(int index) { rangeCheck(index); return elementData(index); } 以前是这样:Object get( int index); 那时是不是需要强制类型转换? 上面的思想++不过源码应该是这样的吧(jdk1.5及以上的):public E get(int index) { RangeCheck(index); return (E) elementData[index]; }ArrayList<Dog> myLIst = new ArrayList<Dog>();从这可以看出lz用的是5.0及以上的版本。当你new一个对象时,你已经为ArrayList的泛型E赋值了Dog,在get时是会进行强制类型转化的((E) elementData[index];)。 不过有一点不是太明白lz这样写get(0).eat();不报错??针对你说的旧版本的旧版Object get( int index); (5.0之前的)源码基本类似,不过没有泛型,也没有强制类型转换,返回的就是一个Object类型。源码:public Object get(int index) { RangeCheck(index); return elementData[index]; }注:在jdk新版本中如果未进行泛型设置时,ArrayList myLIst = new ArrayList(); 相当于ArrayList<Object> myLIst = new ArrayList<Object>(); 那么如果get返回的是Object类型,向下调用eat方法,编译肯定会报错的 从ArrayLIst<Object>取出引用时,引用类型是什么?从ArrayLIst<Dog>取出引用时,引用类型是什么?加上取出方法就是Object get( int index) 以前是这样:Object get( int index); 那时是不是需要强制类型转换?JDK1.5之前是要强制转换的。 从ArrayLIst<Object>取出引用时,引用类型是什么?从ArrayLIst<Dog>取出引用时,引用类型是什么?加上取出方法就是Object get( int index)由类型参数指定,也就是<>中的参数。从ArrayLIst<Object>取出引用时,就是Object。从ArrayLIst<Dog>取出引用时,就是Dog。 @t_jl1979 @FirstHelloWorld 假设取出方法还是以前的那种;Object get( int index),即在JDk 1.5之前的话。从ArrayLIst<Object>取出引用时,引用类型是什么? 从ArrayLIst<Dog>取出引用时,引用类型是什么? 1.5之前不支持这种写法。ArrayList myLIst = new ArrayList();那么只能是Object。 上面的思想++不过源码应该是这样的吧(jdk1.5及以上的):public E get(int index) { RangeCheck(index); return (E) elementData[index]; }ArrayList<Dog> myLIst = new ArrayList<Dog>();从这可以看出lz用的是5.0及以上的版本。当你new一个对象时,你已经为ArrayList的泛型E赋值了Dog,在get时是会进行强制类型转化的((E) elementData[index];)。 不过有一点不是太明白lz这样写get(0).eat();不报错??针对你说的旧版本的旧版Object get( int index); (5.0之前的)源码基本类似,不过没有泛型,也没有强制类型转换,返回的就是一个Object类型。源码:public Object get(int index) { RangeCheck(index); return elementData[index]; }注:在jdk新版本中如果未进行泛型设置时,ArrayList myLIst = new ArrayList(); 相当于ArrayList<Object> myLIst = new ArrayList<Object>(); 那么如果get返回的是Object类型,向下调用eat方法,编译肯定会报错的1.8的jdk是我上面这么写的,不知道你看的是1.x的。各个版本的jdk偶尔会有微小的变化。 1.5之前不支持这种写法。ArrayList myLIst = new ArrayList();那么只能是Object。 看得书太烂...... head First java 把我都看迷糊了 无法正常添加菜单项 哪位高手帮帮小弟,一个随机生成不同数字的问题!!!!!急用!!!!! 为什么 《Java栈与堆》是垃圾 关于ByteBuffer的问题 jRadiobutton怎么弄啊 怎么在一个图片上加文字 为什么sun网站的jdk1.4.01下载不下来了? 迷惑:insert操作越来越慢?! JAVA连接ORACLE问题(100分) 请问Jbuilder中运行application是用哪个程序? Java 为什么子类能转换成父类,反之不行? 多态 传值的一个问题
get(0)不再返回Object,而是直接返回的Dog类型对象。
看JDK源码,这是个泛型方法: public E get(int index) {
rangeCheck(index); return elementData(index);
}
不过源码应该是这样的吧(jdk1.5及以上的):
public E get(int index) {
RangeCheck(index); return (E) elementData[index];
}ArrayList<Dog> myLIst = new ArrayList<Dog>();从这可以看出lz用的是5.0及以上的版本。当你new一个对象时,你已经为ArrayList的泛型E赋值了Dog,在get时是会进行强制类型转化的((E) elementData[index];)。 不过有一点不是太明白lz这样写get(0).eat();不报错??针对你说的旧版本的旧版Object get( int index); (5.0之前的)
源码基本类似,不过没有泛型,也没有强制类型转换,返回的就是一个Object类型。
源码:public Object get(int index) {
RangeCheck(index); return elementData[index];
}注:在jdk新版本中如果未进行泛型设置时,ArrayList myLIst = new ArrayList(); 相当于ArrayList<Object> myLIst = new ArrayList<Object>();
那么如果get返回的是Object类型,向下调用eat方法,编译肯定会报错的
从ArrayLIst<Object>取出引用时,引用类型是什么?
从ArrayLIst<Dog>取出引用时,引用类型是什么?加上取出方法就是Object get( int index)
JDK1.5之前是要强制转换的。
从ArrayLIst<Object>取出引用时,引用类型是什么?
从ArrayLIst<Dog>取出引用时,引用类型是什么?加上取出方法就是Object get( int index)
由类型参数指定,也就是<>中的参数。
从ArrayLIst<Object>取出引用时,就是Object。
从ArrayLIst<Dog>取出引用时,就是Dog。
从ArrayLIst<Dog>取出引用时,引用类型是什么?
ArrayList myLIst = new ArrayList();
那么只能是Object。
不过源码应该是这样的吧(jdk1.5及以上的):
public E get(int index) {
RangeCheck(index); return (E) elementData[index];
}ArrayList<Dog> myLIst = new ArrayList<Dog>();从这可以看出lz用的是5.0及以上的版本。当你new一个对象时,你已经为ArrayList的泛型E赋值了Dog,在get时是会进行强制类型转化的((E) elementData[index];)。 不过有一点不是太明白lz这样写get(0).eat();不报错??针对你说的旧版本的旧版Object get( int index); (5.0之前的)
源码基本类似,不过没有泛型,也没有强制类型转换,返回的就是一个Object类型。
源码:public Object get(int index) {
RangeCheck(index); return elementData[index];
}注:在jdk新版本中如果未进行泛型设置时,ArrayList myLIst = new ArrayList(); 相当于ArrayList<Object> myLIst = new ArrayList<Object>();
那么如果get返回的是Object类型,向下调用eat方法,编译肯定会报错的
1.8的jdk是我上面这么写的,不知道你看的是1.x的。各个版本的jdk偶尔会有微小的变化。
ArrayList myLIst = new ArrayList();
那么只能是Object。
看得书太烂...... head First java 把我都看迷糊了