可能的重复:
接口与抽象类(一般面向对象)
以下是我对接口、抽象类和普通类之间的困惑-
我知道抽象类可以有一个没有实现的方法,但是在基类中将方法声明为虚拟方法并在派生类中使用一些虚拟实现和覆盖有什么害处。正在寻找可以验证答案的实际场景?
当我们有了抽象类时,为什么我们需要一个接口,我知道通过接口我们可以有多重继承,并且研究了各种理论原因,寻找抽象类无法帮助你必须使用接口的实际场景?
拥有抽象类和接口不是开销吗?
我认为你想太多了。这就像看着叉子和勺子,担心何时使用。没有正确的答案,只需使用对您正在做的事情有意义的答案即可。到达那里的途径有很多。
以下是我在现实世界中如何使用它们(财富 500 强公司等......)
接口允许您向类添加任意数量的接口。它们本质上允许您根据需要绑定任何合同。它们是尽可能少的。我使用它的一个例子是音乐编码器服务,它只具有每种编码器类型所需的一些简单属性和方法。后来,随着其他需求的发挥,我添加了更多接口,但我不想破坏不需要了解或关心新接口的其他部分的代码。编码器的耦合非常松散,可能有多个合约,所以这对我来说很有意义。关于界面的最重要的一点是,当您使用它们时,不要不断地改变它们,因为这违背了界面的目的,而应该创建一个新的界面。接口最适合插件类型的开发。
抽象类有点酷,因为你可以在那里已经完成一些基本实现,但你本质上是在说“但你仍然必须制作这一部分”,因为它是类的责任来实现它。例如,这可以用于“保存”方法。假设您有一些以相同方式处理数据的抽象类,但底层抽象类中有许多共同点,它们做了很多工作,但您要求每个继承类型以自己所需的格式保存自己的数据,例如。这可能与在 facebook 和 twitter 中保存内容的联网项目或在数据库和文件系统中保存内容的另一个项目有关,但核心代码总是命中中央数据库,表示它是按上次修改日期保存的。
抱歉,我很无聊,打字很多。但这就是我使用它们的方式。