为什么“扩展”在类声明中位于“implements”之前

时间:2012-05-10 16:05:49

标签: java extends implements

为什么必须始终在类声明中扩展后编写实现,例如:

public class Register extends ActionSupport implements ModelDriven

为什么不

public class Register implements ModelDriven extends ActionSupport 

是编译时错误

2 个答案:

答案 0 :(得分:79)

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

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

答案 1 :(得分:4)

可能会使编译器的工作更容易。这只是一个惯例。能够重新排列这些东西没有任何好处。

这就像问为什么Java函数不是以public int (int a, int b)add{ return a+b; }之类的预先顺序表示法编写。