public class A{} public class B extends A{ public static main(String[] args){ B b=new B(); //正常情况 A a=b; //向上转型 Object obj=a; //向上转型 B b1=(B)obj; //向下转型,需 使用括号转类型,强制转换 } }
要给学生们讲卷子,不知道这个转型问题怎么讲,搜了几个例子,才发现这个例子最合适,也好懂。 class Chinese{
public static void print(){ System.out.println("this is 中国人");
}
} class Guangdongren extends Chinese{ public static void print(){ System.out.println("this is 广东人 "); }
} class HunanRen extends Chinese{ public static void print(){ System.out.println("this is 湖南人 "); } } class GuangzhouRen extends Guangdongren{ public static void print(){ System.out.println("this is 广州人 "); } }
public class Test {
public static void main(String args[]){
Chinese c=new Chinese();//这样编译可以通过,但运行会抛出异常 HunanRen h=(HunanRen)c;// 这是因为向下转型错误,中国人不一定是湖南人,这里 //是不是可以这样理解要将c强制转换成一个HunanRen
public class A{}
public class B extends A{
public static main(String[] args){
B b=new B(); //正常情况
A a=b; //向上转型
Object obj=a; //向上转型
B b1=(B)obj; //向下转型,需 使用括号转类型,强制转换
}
}
File myDownfiles=new File(".\\downfiles.data");
ObjectInputStream ois=new ObjectInputStream(myDownfiles);
DefaultListModel model1=(DefaultListModel)ois.readObject();这段代码怎么知道ois.readObject()取出的原类型是DefaultListModel
楼主要是想看一下这个类的名称,可以使用String name = obj.getClass().getName();方法。
但是,如果是用程序中的那种“知道”,就要换一种思维方式了。也就是说,你先编写一个写入文件的程序,再编一个读出文件的程序。
既然两个程序都是你参与编写的,当然,Object是什么类型,你自己当然就知道了。如果,随便什么被序列化的文件,被读入到程序。你要判断他是什么类,就可以使用obj.getClass();方法。
然后,在写程序,恐怕就要用到反射了。
File myDownfiles=new File(".\\downfiles.data");
ObjectInputStream ois=new ObjectInputStream(myDownfiles);
DefaultListModel model1=(DefaultListModel)ois.readObject();
class Chinese{
public static void print(){
System.out.println("this is 中国人");
}
}
class Guangdongren extends Chinese{
public static void print(){
System.out.println("this is 广东人 ");
}
}
class HunanRen extends Chinese{
public static void print(){
System.out.println("this is 湖南人 ");
}
}
class GuangzhouRen extends Guangdongren{
public static void print(){
System.out.println("this is 广州人 ");
}
}
public class Test {
public static void main(String args[]){
Chinese c=new Chinese();//这样编译可以通过,但运行会抛出异常
HunanRen h=(HunanRen)c;// 这是因为向下转型错误,中国人不一定是湖南人,这里
//是不是可以这样理解要将c强制转换成一个HunanRen
HunanRen h=new HunanRen();//这样就没有问题,这是向上转型,
Chinese c=(Chinese)h; //湖南人一定是中国人这是是否可以理解为将h转换成Cinese
Chinaese h=new HunanRen();//向上转型
h.print();
}
}