Java反射:使子类实例被引用,就好像它是超级实例一样



考虑以下内容:

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,要么使用反射。

(理论上可以在本地库中进行一些干扰对象类型的幕后操作。但是这将是不可移植的,非常不安全并且不是一个理智的程序员应该考虑做的事情…)

相关内容

  • 没有找到相关文章

最新更新