49

为什么必须implement总是写extend在类声明之后?例如:

public class Register extends ActionSupport implements ModelDriven

为什么不能:

public class Register implements ModelDriven extends ActionSupport 

后者会产生编译时错误。

4

2 回答 2

103

当 Java 编译器将类转换为字节码时,它必须首先查找父类。那是因为类的底层实现是指向父类的字节码——它包含相关的方法和字段。然后它添加指向子类函数代码的指针——其中一些是由'implements'关键字强制执行的。

因为父类必须是可编译的,所以如果编译器预先知道该类是什么会更容易。此外,您只能扩展一个类,但可以实现任意数量的接口。如果可以在任意数量的实现指令中混合使用 extends 关键字,则编译时间会增加。编译器希望尽快失败以减少开发时间,因此这种选择是合乎逻辑的。此外,出于同样的原因,它可以帮助您清楚地思考课程。

于 2012-05-10T16:13:01.753 回答
5

可能是为了使编译器的工作更容易。这只是一个约定。能够重新排列这些东西没有任何优势。

这就像在问为什么 Java 函数不是以public int (int a, int b)add{ return a+b; }.

于 2012-05-10T16:07:34.073 回答