当前位置: 首页 > 面试题库 >

为什么在类声明中“扩展”在“实现”之前

曹波鸿
2023-03-14
问题内容

为什么必须implement始终extend在类声明之后编写?例如:

public class Register extends ActionSupport implements ModelDriven

为什么不能这样:

public class Register implements ModelDriven extends ActionSupport

后者会产生编译时错误。


问题答案:

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

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



 类似资料:
  • 的实现实现了以及扩展了。但是在Java文档中,您可以看到AbstractList已经实现了List。那么在扩展AbstractList的同时实现List会不会是多余的呢? 我的第二个问题 请看一下下面的代码: Arrays类的方法包含自己的ArrayList实现。但是这个只扩展了AbstractList,而没有实现List。但是上面的代码编译。 但将代码修改为以下内容时 我得到一个错误: 这背后的

  • 问题内容: 当我得知该类在Java中被声明为final时,我想知道为什么会这样。那时我没有找到任何答案,但是这篇文章:如何在Java中创建String类的副本?让我想起了我的疑问。 当然,String提供了我所需要的所有功能,而且我从未想过需要扩展String类的任何操作,但是您仍然永远不会知道有人可能需要什么! 那么,有谁知道设计师决定将其定稿时的意图是什么? 问题答案: 将字符串实现为不可变对

  • 特定于 Declarative 映射API。 在 1.4 版更改: 绝大多数声明性扩展现在集成到SQLAlchemy ORM中,并且可以从 sqlalchemy.orm 命名空间。请参阅上的文档 声明性映射 对于新文档。有关更改的概述,请参见 声明式现在集成到ORM中,具有新的特性 . Object Name Description AbstractConcreteBase “concrete”声

  • 问题内容: 工具的实现以及扩展。但是在Java文档中,您可以看到AbstractList已经实现了List。那么实现List以及扩展AbstractList是否不是多余的? 我的第二个问题, 请看下面的代码: Arrays类的方法包含其自己的ArrayList实现。但这仅扩展AbstractList而未实现List。但是上面的代码可以编译。 但是将代码修改为以下内容时 我收到一个错误: 这是什么原

  • 问题内容: 为什么不能在Java中将类声明为静态类? 问题答案: 只有嵌套的类可以是静态的。这样,你可以使用嵌套类而无需外部类的实例。

  • 问题内容: 为什么我们要在Java类中声明一个接口? 例如: 问题答案: 当您想在对象中收集一些字段以强调概念时,可以创建一个外部类,也可以创建一个内部类(称为嵌套(静态)或内部)。 如果要强调这个合作类在原始对象使用之外完全没有意义(没有用)的事实,可以将其嵌套/内部。 因此,在处理某些层次结构时,可以描述一个“嵌套” ,它将由包装类的子类实现。 在JDK中,最显著的例子是内部接口中定义的接口,