我想知道何时应该使用接口。
让我们考虑以下内容:
public abstract class Vehicle {
abstract float getSpeed();
}
和:
public interface IVehicle {
float getSpeed();
}
我可以轻松实现它们,它们具有相同的功能…但是我也可以向车辆类中添加一些变量,这些变量可能应该在车辆中使用(maxSpeed,carType …)
使用接口的原因是什么?
谢谢!
编辑:
我在另一个线程中找到了关于它的漂亮链接:http : //www.thecoldsun.com/en/content/01-2009/abstract-
classes-and-interfaces
从Java How toProgram关于抽象类:
由于它们仅在继承层次结构中用作超类,因此我们将它们称为抽象超类。 这些类不能用于实例化对象,因为抽象类是不完整的。
子类必须声明“缺失的部分”以成为“具体的”类,您可以从中实例化对象。否则,这些子类也将是抽象的。
要回答您的问题“使用接口的原因是什么?”:
一个 抽象类的目的 是提供一种适当的超类其他类可以继承并且因此共享共同的设计。
与接口相反:
一个 接口描述 了一组可以在对象上调用的方法,但 所有这些方法并没有提供具体的实现
......一旦一个类实现一个接口,该类的所有对象有一个是,一个接口类型的关系,并且 保证该类的所有对象都提供接口描述的功能。
该类的所有子类也是如此。
因此,要回答您的问题“我想知道何时应该使用接口”,我认为您应该在需要完整实现时使用接口,而在需要部分设计时使用抽象类(以实现可重用性)
问题内容: 为什么要创建抽象或接口类,或者何时应使用抽象或接口类? 问题答案: 仅在声明类必须具有的方法和成员时,才使用接口。实现该接口的任何人都必须声明和实现该接口列出的方法。 如果你还想拥有默认实现,请使用抽象类。扩展抽象类的任何类都必须仅实现其抽象方法和成员,并且将具有抽象类其他方法的一些默认实现,你可以覆盖或不重写。 -编辑-忘了提,Earwicker提醒我 最后,你可以根据需要实现任意数
如果有人能给出我在Java15中需要在接口类和抽象类之间做出选择的1-2个场景示例,我将非常感激。此外,如果它能在现实生活中的项目,而不是动物或形状类的例子,将是伟大的。 谢谢!!
问题内容: 我知道我可以使用serialVersionUID来控制类的版本。我读到我可以添加或删除字段,并且该类仍将兼容,它将仅使用默认值。 什么时候 必须 更改serialVersionUID? 问题答案: 当对类的结构进行不兼容的更改时,最好更改serialVersionUID字段的值。Java对象序列化规范中列出了不兼容更改的完整列表。 为了进一步扩展,对类的不兼容更改将阻止反序列化机制创建
对许多人来说,这可能是一个简单的问题,但让我困惑。我从凯西·塞拉那里挑选了一个例子,展示了抽象类的实用性,但我无法理解抽象类的整体重要性。 例如,我们有一个带有抽象方法的抽象类, 我的问题是——为什么我们首先需要抽象类来为每种汽车类型定制方法?为什么不在这些汽车子类型中的任何一个中使用这两种方法,比如宝马和其他两个——大众和奥迪——可以简单地覆盖这些方法?
如果我用MockBean替换Autowired的话,它是有效的,但我不知道为什么
问题内容: 有时我们有几个类,这些类的某些方法具有相同的签名,但是与声明的Java接口不对应。例如,和(在中的其他几个 )中都有一个方法 现在,假设我希望对具有该方法的对象进行一些操作。然后,我想有一个接口(或者自己定义),例如 这样我可以写: 但是,可悲的是,我不能: 此演员表将是非法的。编译器 知道 这 是不是 一个,因为类没有宣布实现该接口...... 然而“实际上”实现它 。 有时这会带来