有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java中的编译器构造基类的更改会影响子类的字节码吗?

嗨,伙计们,有人能帮我吗

场景:

有关上下文,请参阅我以前的帖子。 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的字节码会改变吗如果我把新编译的类放在A中。当ClassB、ClassC和ClassD调用genericMethodA()时,它将返回50或100

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

伙计们,如果你们需要更多关于我的问题的信息或澄清,请不要犹豫发表评论


共 (1) 个答案

  1. # 1 楼答案

    不,没有

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

    但总的来说,Java实际上是为了支持修改某些类而不修改其他类。事实上,有一些开发人员指南告诉您什么是可以安全更改的,什么需要重新编译依赖项