繁体   English   中英

Java继承,泛型和字节码

[英]Java inheritance, generics and the byte-code

当Java中的一个类继承另一个类时,继承的类是否(在物理上)成为继承类的一部分,从而将其字节代码添加到该继承类的.class文件中? 还是继承类的.class文件仅包含特定于它的部分,并且在运行时两个类的两个.class文件中的对象详细信息一起构建到一个对象中? 如果这两个类别中的任何一个或两个都是通用的,对流程有影响吗? 谢谢。

当A扩展B时,则仅将该信息写入A的类文件中。

没有从B.class到A.class的任何形式的代码复制。 含义:更改B时,通常不需要重新编译A。

泛型主要是编译时的功能-任何泛型类型都将以字节码形式转换为Object (称为类型Erase )。 类文件包含一些有关哪些实体被声明为通用类型的元信息,仅此而已。 换句话说:Java泛型是一样的东西C ++模板。

第二个,例如,如果您编译以下两个类:

public class Parent {
  public void myMethod(String arg) {
  }
}

public class Child extends Parent {
  public void myMethod(String arg) {
    super.myMethod(arg);
  }
}

然后,在编译完两个类之后,可以像下面这样更改Parent类:

public class Parent {
  public void myMethod(Integer arg) {
  }
}

您会收到NoSuchMethodError ,这是因为Child在运行时调用了父级的myMethod

我希望清楚,再见。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM