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

lzj*_*jun 43 java extends implements

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

public class Register extends ActionSupport implements ModelDriven
Run Code Online (Sandbox Code Playgroud)

为什么不

public class Register implements ModelDriven extends ActionSupport 
Run Code Online (Sandbox Code Playgroud)

是编译时错误

Nat*_*ord 90

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

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

  • 我尽我所能.毕竟,我们都在一起! (4认同)
  • +1最后一个理智的答案.谢谢.:) (3认同)
  • @NathanielFord,我们真的吗?我被严重误导了. (2认同)

tru*_*ity 5

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

这就好比问为什么Java函数没有像一样用预写符号表示public int (int a, int b)add{ return a+b; }