java编程思想中说到了向下强制类型转换,还有一个例子
import java.util.*;
class Useful {
public void f() {}
public void g() {}
}
class MoreUseful extends Useful {
public void f() {}
public void g() {}
public void u() {}
public void v() {}
public void w() {}
}
public class RTTI {
public static void main(String[] args) {
Useful[] x = {
new Useful(),
new MoreUseful()
};
x[0].f();
x[1].g();
// Compile-time: method not found in Useful:
//! x[1].u();
((MoreUseful)x[1]).u(); // Downcast/RTTI
((MoreUseful)x[0]).u(); // Exception thrown 向下转换产生异常
}
} ///:~
这个例子中,向下类型转换中的语句产生异常,书上也没说怎么处理这个异常。
我想问下:java中是不是不允许使用向下类型转换(应该不是,因为书上还提到了RTTI),如果允许,那么怎么避免这种异常?
import java.util.*;
class Useful {
public void f() {}
public void g() {}
}
class MoreUseful extends Useful {
public void f() {}
public void g() {}
public void u() {}
public void v() {}
public void w() {}
}
public class RTTI {
public static void main(String[] args) {
Useful[] x = {
new Useful(),
new MoreUseful()
};
x[0].f();
x[1].g();
// Compile-time: method not found in Useful:
//! x[1].u();
((MoreUseful)x[1]).u(); // Downcast/RTTI
((MoreUseful)x[0]).u(); // Exception thrown 向下转换产生异常
}
} ///:~
这个例子中,向下类型转换中的语句产生异常,书上也没说怎么处理这个异常。
我想问下:java中是不是不允许使用向下类型转换(应该不是,因为书上还提到了RTTI),如果允许,那么怎么避免这种异常?
解决方案 »
- samba的安装
- java nextLine()能否接受并输出接受的汉字 急~
- swing 两个JFrame间如何传值?
- spring表单提交出现很奇怪的问题
- JAVA GUI基础题目:怎么样才能是点击【帮助】里的【退出帮助】在弹出的窗口时,为要关闭这一个窗口,而不关闭菜单窗口和登陆界面的窗口?该怎么办啊 其他的不好的地方望帮我改正啊
- 请教进度条的设置与使用的一个简单问题??
- 在构造方法中,可以有执行语句吗?
- 为什么将集合变成数组后输出不成功?
- 怎么样才能从microsoft excel表中取得数据,并能把数据写回到excel表中呢?
- 如何把String转化成Double??
- java的问题
- 请问这样的功能界面该怎么设计?(一个图片和一label和两个按钮捆绑到一起)
MoreUseful u1 = (MoreUseful)u;
这种才叫向下类型转换第二种是不允许的,要抛运行时错误
Useful x[0] = new Useful();class MoreUseful extends Useful {}((MoreUseful)x[0]).u(); 你这不是向下类型转换。内存中的类型与编译时的类型都是 Useful
jvm 不知道向哪个方向转换类型。
instanceof
Useful u = new MoreUseful();
MoreUseful m = (MoreUseful)u;向下转型不报错的前提是,内存中的对象是子类对象
比如上面的u虽然是一个父类的引用,但是内存中实际上是子类对象,所以就可以转
是这条语句么?Useful x[0] = new Useful();
Useful x[0] 是申明的引用类型,x[0]是逻辑对象(指向内存中的实例)。