在Java中,对BaseClass的更改会影响SubClass的字节代码吗?

时间:2013-11-20 02:32:29

标签: java compiler-construction bytecode

大家好,任何人都可以帮我这个。

情境:

有关背景信息,请查看我的旧帖子。 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编译代码的文档。例如,当一个类被扩展时,编译器会将指令放在子类字节代码上,或者只是指向基类。

如果您需要更多信息或澄清我的问题,请不要犹豫。

1 个答案:

答案 0 :(得分:1)

不,不。

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

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