A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 doitforyou 于 2013-10-23 18:37 编辑



是关于返回类型List<String>向下转型为ArrayList<String>的疑问.
编译时期是通过的,在运行时期抛出异常,类型转换异常,一时想不通,希望各位详细解答下,谢谢了。

评分

参与人数 1技术分 +1 收起 理由
周志龙 + 1 赞一个!

查看全部评分

4 个回复

倒序浏览
自己想多了,应该是很简单的类型问题,子类类型不可以接收父类类型。惭愧。
回复 使用道具 举报
本帖最后由 阿里策 于 2013-10-23 18:53 编辑

    我看视频,好像集合中没有转型之说,ArrayList<T>只能接收ArrayList<T>,不能接收其他的。你指的情况是多态吗?
如果这样写代码是可以的:
  1.   public static void main(String[] args)throws Exception
  2.         {
  3.                 List<String> al = new ArrayList<String>();
  4.                                 al.add("srgffcj");
  5.                                 al.add("fgyuht");
  6.                                 al.add("sp;if");
  7.                                 
  8.                                 //List<String> l=new ArrayList<String>();
  9.                                 al = al.subList(0,al.size());//这是正确的
  10.                                 //ArrayList<String> a = (ArrayList<String>)al;//这是错误的,应该是al调用subList方法后返回了一个List<T>类型
  11.                                 

  12.         }
复制代码
楼主说的是不是多态的强制转换类型啊,多态必须是父类引用接收子类对象,而且强制向下转型时,必须还转型为所接收的子类类型。
例如:Fu f = new ZiA();
         ZiA z = (ZiA)f;

另外我看了一个API,发现subList方法返回的是List<T>类型,这样看来,List<T>类型是肯定转化不成其子类ArrayList类型的。不知道我理解的对不对,希望对你有帮助

评分

参与人数 1技术分 +1 收起 理由
周志龙 + 1 赞一个!

查看全部评分

回复 使用道具 举报
阿里策 发表于 2013-10-23 18:52
我看视频,好像集合中没有转型之说,ArrayList只能接收ArrayList,不能接收其他的。你指的情况是多态吗 ...

^_^ 很有帮助的,其实我提了后自己就想通了,和你说的一样,当时自己把问题复杂化了,惭愧。
谢谢侬。可惜问题结贴了不能给你技术分,不过你技术分也够了,不然我就更惭愧了。
回复 使用道具 举报
doitforyou 发表于 2013-10-23 23:55
^_^ 很有帮助的,其实我提了后自己就想通了,和你说的一样,当时自己把问题复杂化了,惭愧。
谢谢侬。可 ...

    呵呵,没事,已经给我加分了。有疑问就要问出来啊,有时候我也是这样,一时间某个问题想不通,过后就好了,大家相互回答问题,互帮互助,分只是起一个促进作用啦!:lol
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马