考虑以下内容:
public class A {
public String name = "i am a A instance";
}
public class B extends A {
public String name = "i am a B instance";
}
public class ReflectTest {
/**
* @param args
*/
public static void main(String[] args) {
A ainstance = new A();
A binstance = new B();
B bbinstance = new B();
System.out.println(bbinstance.name);
System.out.println(ainstance.getClass().cast(binstance).name);
System.out.println(ainstance.getClass().cast(bbinstance).name);
System.out.println(ainstance.getClass().cast(binstance).getClass());
System.out.println(ainstance.getClass().cast(bbinstance).getClass());
}
}
输出为:
i am a B instance
i am a A instance
i am a A instance
class cs236703.s2013.hw4.tests.B
class cs236703.s2013.hw4.tests.B
是否有一种方法来操纵java反射返回类a而不是类B在最后2 printlns?
是否有一种方法来操纵java反射返回类a而不是类B在最后2 printlns?
没有。
getClass()
方法返回目标方法的实际类,无论您将对象的引用强制转换为什么。你不能改变这个,要么使用简单的Java,要么使用反射。
(理论上可以在本地库中进行一些干扰对象类型的幕后操作。但是这将是不可移植的,非常不安全并且不是一个理智的程序员应该考虑做的事情…)