可以添加一个新的 class 可以转换为现有的最终 class 吗?

Possible to add a new class that can be cast to an existing final class?

我在库中定义了 class 个:

 public final class A {blah}

然后我想在某个地方使用新的 class B 来替换它:

A a = new A();  
A a = (A) new B();

B有A中的所有方法和成员,所以这样做其实是安全的,我用C++也可以。但是对于 Java,此转换将导致异常。那么在 Java 中是否有任何解决方法或黑客来做到这一点? 另外,有没有不接触虚拟机的破解方法?

尽管 B 拥有所有方法并且 属性 和 A 拥有,但您不能将 B 的对象转换为 A 的引用。这意味着 -

A a = (A) new B(); 

无效,除非 B 扩展 A.

这里 A 是最终的 class,因此您不能将 A 扩展为 B。您必须使 A 非最终且 B 必须扩展 A。然后上面的转换将有效。

Java 的 final 关键字的存在是为了防止子类化,所以简单的答案是 。您可以使用 PowerMock 之类的东西来做这种事情。不过,我不会在测试之外这样做。

这是不可能的,因为你的 class A 是最终的。最终的 class 只是一个无法扩展的 class。