Java开发实战经典里P498有这段代码:import java.util.ArrayList ;
import java.util.List ;
public class ArrayListDemo04{
public static void main(String args[]){
List<String> allList = null ;
allList = new ArrayList<String>() ; // 指定操作的泛型为String
allList.add("Hello") ; // 此方法由Collection接口而来
allList.add(0,"World") ; // 在第一个位置上添加新的内容
allList.add("MLDN") ; // 向Collection中加入内容
allList.add("www.mldn.cn") ;
String str[] = allList.toArray(new String[]{}) ; // 指定好类型
System.out.print("指定数组类型:") ;
for(int i=0;i<str.length;i++){
System.out.print(str[i] + "、") ;
}
System.out.print("\n返回对象数组:") ;
Object obj [] = allList.toArray() ; // 返回Object类型
for(int i=0;i<obj.length;i++){
String temp = (String)obj[i] ; // 进行向下转型
System.out.print(temp + "、") ;
}
}
};划横线加粗的语句【String temp = (String)obj[i] ;】这句代码是向下转型,请问向下转型前是否必须向上转型,如果需要,这句代码的向上转型在哪?
import java.util.List ;
public class ArrayListDemo04{
public static void main(String args[]){
List<String> allList = null ;
allList = new ArrayList<String>() ; // 指定操作的泛型为String
allList.add("Hello") ; // 此方法由Collection接口而来
allList.add(0,"World") ; // 在第一个位置上添加新的内容
allList.add("MLDN") ; // 向Collection中加入内容
allList.add("www.mldn.cn") ;
String str[] = allList.toArray(new String[]{}) ; // 指定好类型
System.out.print("指定数组类型:") ;
for(int i=0;i<str.length;i++){
System.out.print(str[i] + "、") ;
}
System.out.print("\n返回对象数组:") ;
Object obj [] = allList.toArray() ; // 返回Object类型
for(int i=0;i<obj.length;i++){
String temp = (String)obj[i] ; // 进行向下转型
System.out.print(temp + "、") ;
}
}
};划横线加粗的语句【String temp = (String)obj[i] ;】这句代码是向下转型,请问向下转型前是否必须向上转型,如果需要,这句代码的向上转型在哪?
这里做向上转型的就是“Object obj [] = allList.toArray() ;”这句,是将String类型转型为Object。
Object obj [] = allList.toArray() 相当于
Object obj0 = allList.get(0);
Object obj1 = allList.get(1);
Object obj2 = allList.get(2);
..........................
Object obj[] = {obj0,obj1,obj2,.......};
源代码中allList.toArray() 的内部完成了向上转型。谢谢大家。
我觉得这句话返回的肯定是String[]类型。只是接收它的是父类对象。父类对象对于子类是照单全收,只是抽象的“向上转型”,其实没做任何操作。如果你通过父类对象调子类的方法,JVM不知道你要调谁的方法,所以必须向下转型。具体还是要反编译看源码如有错误,还请批评指正!
这句话里,其实返回的是string 类型,但是把他们向上转型成了 obj。