基类的集合与派生类的集合能直接转换吗?

smartcatiboy 2009-10-26 10:46:43
例如
class CParent
class CChild extends CParent

对于
List <CParent> vctParentList
List <CChild> vctChildList

能直接转换吗?还是用

for (int i=0;i<vctParentList.size();i++)
{
vctChildList(i)=(CChild) vctParentList(i);
}

????
...全文
112 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lz12366007 2009-10-27
  • 打赏
  • 举报
回复
可以的。。。。
swandragon 2009-10-27
  • 打赏
  • 举报
回复
CParent适用的地方CChild都适用
CChild适用的地方CParent不一定适用

男人,女人都是人
但人不一定是男人,只有原来是男人的人才能转换成男人
haojia0716 2009-10-27
  • 打赏
  • 举报
回复
其实没必要转
haojia0716 2009-10-27
  • 打赏
  • 举报
回复
不能直接转 不关泛型的事
Heart_X_Raid 2009-10-27
  • 打赏
  • 举报
回复
2楼兄弟总结的很即雷人又精辟呀:

什么是继承?就是
1、男人,女人都是人
2、但人不一定是男人
3、只有原来是男人的人才有希望变回男人

Class Man extends People :
1、People p=new Man();
2、Man m != new People();
3、People p=new Man();
Man m=(People)p;
Heart_X_Raid 2009-10-27
  • 打赏
  • 举报
回复
LZ老兄,你写的vctChildList(i)=(CChild) vctParentList(i); 让人很费解呀!!
第一:你把集合类当数组用了,vctChildList(i)应该写成vctChildList.get(i)
第二:没听说过集合类可以用get方法取元素后赋值的呀???

List<String> array=new ArrayList<String>();
array.get(0)="搞错了吧?"; // Error: 这连编译都通不过的。


所以你所说的直接转换是不可能的。另外关于强制类型转换是有严格的要求的,如果试图在继承链上进行向下转型,一定在要下面这种情况下才可以转:
class CChild extends CParent 
CParent cp=new CChild(); //注意:cp是CParent类型的,但开辟的实际对象的类型是CChild的。这就是多态,子类可以自动向上转型成父类。
CChild cc=(CChild)cp; //可以强制类型转变


如果上面的cp实际类型还是CParent【CParent cp=new CParent()】,这样强制类型转换在运行的时候一定产生一个ClassCastException异常。因此我们经常在强制类型转变之前用instanceof运算符控制一下。
if(cp instanceof CChild){
CChild cc=(CChild)cp;
}





whut0802 2009-10-27
  • 打赏
  • 举报
回复
不能直接转!!
看代码:

import java.util.ArrayList;
import java.util.List;

public class TestGen {

public static void main(String[] args){
//创建一个List<String>对象
List<String> strList=new ArrayList<String>();
//将strList作为参数来调用test()方法
TestGen.test(strList);//①
}

public static void test(List<Object> c){
for(int i=0;i<c.size();i++){
System.out.println(c.get(i));
}
}
}

编译上面的程序,将在①处发生错误:无法将Test中的test(java.util.List<java.lang.Object>)应用于(java.util.List<java.lang.String>)
错误信息告诉我们:虽然String是Object的子类,但是List<String>类并不是List<Object>的子类,也就是说List<String>对象不能当成List<Object>对象使用
qingzhe2008 2009-10-26
  • 打赏
  • 举报
回复
直接转,是什么意思?

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧