gpt4 book ai didi

Java 反射 : making a subclass instance be referred to as if it was super instance

转载 作者:行者123 更新时间:2023-11-29 03:33:17 27 4
gpt4 key购买 nike

考虑以下几点:

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 反射在最后 2 个 printlns 中返回类 A 而不是类 B?

最佳答案

Is there a way to manipulate java reflections to return class A instead of class B in the last 2 printlns?

不,没有。

getClass() 方法返回目标方法的实际 类,无论您将对象的引用转换为什么。您无法更改此设置,无论是使用简单的 Java 还是使用反射。

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

关于Java 反射 : making a subclass instance be referred to as if it was super instance,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16873866/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com