考虑以下代码
public class A {
public static void main(String[] args) {
new A().main();
}
void main() {
B b = new B();
Object x = getClass().cast(b);
test(x);
}
void test(Object x) {
System.err.println(x.getClass());
}
class B extends A {
}
}
我预计输出“A级”,但我得到“A $ B级”。
有没有办法将对象x转换为A.class,所以当在方法调用中使用时,运行时会认为x是A.class?
答案 0 :(得分:6)
强制转换不会更改对象的实际类型。例如:
String x = "hello";
Object o = (Object) x; // Cast isn't actually required
System.out.println(o.getClass()); // Prints java.lang.String
如果您希望实际的对象只是A
的实例,则需要创建A
的实例。例如,您可能有:
public A(B other) {
// Copy fields from "other" into the new object
}
答案 1 :(得分:0)
没有。转换不会更改对象的类型,只会更改您引用的类型。
例如,此代码:
B b = new B();
A a = (A) b;
a.doSomething();
不将b
强行转换为A
的实例,然后在A类中调用doSomething()
方法。所有强制转换都允许您引用B
类型的对象,就好像它是A
类型一样。
您无法更改对象的运行时类型。