gpt4 book ai didi

java - 在Java中,基类的更改会影响子类的字节码吗?

转载 作者:行者123 更新时间:2023-12-01 13:49:16 26 4
gpt4 key购买 nike

大家好,谁能帮我解决这个问题。

场景:

有关上下文,请查看我的旧帖子。 How to patch a Java program?

所以基本上在我的公司,如果我必须重新部署程序,我只允许更新特定的类。这意味着我必须向管理员提供编译后的类,并告诉他们这些文件应该放在哪里。

问题:

现在我的问题是我有一个名为 ClassA 的类,它由 ClassB、ClassC 和 ClassD 扩展。 ClassA 有一个名为 genericMethodA() 的方法,我想更改其内部实现。

示例

// old implementation in ClassA
public void int genericMethodA()
{
return 50;
}

// change to this implementation in ClassA
public void int genericMethodA()
{
return 100;
}

// Method in ClassB, ClassC, and ClassD
public void logB()
{
log.info(genericMethodA());
}

ClassB、ClassC 和 ClassD 的字节码会改变吗? 因此,如果当 ClassB、ClassC 和 ClassD 调用 genericMethodA() 时,我将新编译的 ClassA.class 放入旧的 JAR/WAR 中它会返回 50 还是返回 100。

任何人都可以指出 java 如何编译代码的文档。例如,当扩展一个类时,编译器会将指令放在子类字节代码上,还是仅指向基类。

如果您需要更多信息或澄清我的问题,请随时发表评论。

最佳答案

不,没有。

更新类时需要注意的主要事情是在编译时确定的事情。这包括在编译时选择并硬编码的方法重载,以及在编译时内联的静态最终基元常量。

但总的来说,Java 实际上被设计为支持修改某些类,同时保持其他类不变。事实上,开发人员指南会告诉您哪些内容可以安全更改以及哪些内容需要重新编译依赖项。

关于java - 在Java中,基类的更改会影响子类的字节码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20086227/

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