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

为什么要声明一个接口,然后用Java实例化一个对象?

乐刚毅
2023-03-14
问题内容

我和一个朋友正在学习Java。今天,我们正在研究接口,并且讨论了如何使用接口。

我的朋友向我展示的示例代码包含以下内容:

IVehicle modeOfTransport1 = new Car();
IVehicle modeOfTransport2 = new Bike();

其中 IVehicle 的是,公司在汽车和自行车两个类实现的接口。定义接受 IVehicle
作为参数的方法时,可以使用接口方法,并且在运行代码时,上述对象可以正常工作。但是,这在声明汽车和自行车时非常正常,就像通常这样:

Car modeOfTransport1 = new Car();
Bike modeOfTransport2 = new Bike();

因此,我的问题是-在声明和实例modeOfTransport 对象时,为什么要使用前一种方法而不是后者?有关系吗?


问题答案:

没关系。

真正重要的地方是需要在IVehicle上运行的其他接口。如果他们接受参数并以IVehicle的形式返回值,那么代码将更易于扩展。

如您所述,这些对象中的任何一个都可以传递给接受IVehicle作为参数的方法。

如果您具有使用了Car或Bike特定操作的后续代码,则将它们声明为Car或Bike将是有利的。特定于汽车和自行车的操作将可用于每个相关对象,并且两者均可作为IVehicle使用(即可以通过)。



 类似资料:
  • 问题内容: 我一直在研究J2EE的JMS API,发现了一个奇怪的行为,其中在接口(例如Session中的createQueue)中声明的某些方法在诸如QueueSession之类的子接口中再次声明,并且具有相同的文档。 因为子接口“继承”了它继承的接口的所有方法声明,并且由于JavaDoc工具没有问题,所以可以对子接口的JavaDoc进行排序并创建“继承的操作”列表,因此我无法弄清楚这将实现什么

  • 问题内容: 我读到要使一个类在Java中不可变,我们应该执行以下操作: Do not provide any setters Mark all fields as private Make the class final标记为私有 为什么需要步骤3?我为什么要上课呢? 问题答案: 如果你不标记该类,那么我可能会突然使你看似不变的类真正变得可变。例如,考虑以下代码: 现在,假设我执行以下操作: 注意

  • 问题内容: 我的意思是: 我用谷歌搜索,发现了这个: 表示定义接口方法的实现。但是接口没有实现,因此是不可能的。 但是,interface是100%抽象的类,抽象类可以实现接口(100%抽象的类)而无需实现其方法。将其定义为“接口”时会出现什么问题? 详细来说, 问题答案: 表示实现,当旨在声明仅提供不提供实现时。 A 100%,是功能上等同于,但它也可以实现,如果你想(在这种情况下,它不会保持1

  • 问题内容: 有时我们有几个类,这些类的某些方法具有相同的签名,但是与声明的Java接口不对应。例如,和(在中的其他几个 )中都有一个方法 现在,假设我希望对具有该方法的对象进行一些操作。然后,我想有一个接口(或者自己定义),例如 这样我可以写: 但是,可悲的是,我不能: 此演员表将是非法的。编译器 知道 这 是不是 一个,因为类没有宣布实现该接口...... 然而“实际上”实现它 。 有时这会带来

  • 问题内容: 在开始阅读之前:这个问题不是关于理解monad的问题,而是关于确定Java类型系统的局限性的,这会限制接口的声明。 在我的努力去理解单子我读这个由埃里克利珀SO- 答案上询问单子简单的解释问题。在那里,他还列出了可以在monad上执行的操作: 有一种方法可以将未放大类型的值转换为放大类型的值。 有一种方法可以将未放大类型的操作转换为遵循前面提到的功能组成规则的放大类型的操作 通常,有一

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