Java继承,泛型和字节码

时间:2017-11-17 15:51:47

标签: java

当Java中的类继承另一个类时,继承的类是否(继续)成为继承类的一部分,以便将其字节代码添加到继承类的.class文件中?或继承类的.class文件是否仅包含特定于它的部分,并且在运行时,两个类的两个.class文件中的对象详细信息一起构建到一个对象中?如果其中一个或两个类都是通用的,它会对该过程产生影响吗? THX。

2 个答案:

答案 0 :(得分:1)

当A扩展B时,只有信息被写入A的类文件中。

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

泛型主要是编译时功能 - 任何泛型类型都会在字节码中变成 Object (称为type erasure)。类文件包含一些关于哪些实体被声明为泛型类型的元信息,但这就是全部。换句话说:Java泛型与C ++模板相同。

答案 1 :(得分:0)

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

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

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

然后,在编译完两个类之后,将类更改为:

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

您将获得NoSuchMethodError,这是因为Child在运行时调用了父myMethod

我希望很清楚,再见。