1
8
把一个接口想象成
另一方面,抽象类在 一些 您需要为类实现的代码,但不是所有代码。您可以为需要由抽象类的子类实现的部分声明抽象方法。记住抽象方法 必须 由子类实现,但也可以通过普通的private/public/protected/etc.方法在类内部提供自己的代码。 所以,如果您只是在编写一个您希望子类实现的契约,那么可以考虑接口。但是如果你写的东西更多的是一个“模式”,你可能有一些方法实现(但不是全部),这些方法实现对所有的子实现都是通用的,那么你应该考虑抽象类。 |
2
6
两者都不是“更好”——它们有不同的目的。
|
3
2
这取决于你想做什么。当您具有具有公共状态的公共功能时,抽象类是很好的。即使使用抽象类,提供接口通常也很有帮助,因为您并不总是需要访问状态,而其他类可能在没有该状态的情况下实现接口(例如测试存根)。 如果您只需要helper方法(没有状态,只需要组成方法调用),那么我更喜欢为helper函数使用带有扩展方法的接口(例如重载)。 |
4
1
已经有了一些代码答案,但我想添加另一个许多开发人员忘记的视角。 如果在公共API中使用接口,那么您已经将自己提交给它包含的那些成员,并且只提交给那些成员。如果您试图向接口添加某些内容,那么这是一个破坏版本的更改。为什么?因为每个类都必须实现接口中的每个成员。使用API的代码将停止编译。 抽象类不受这种限制,因为您可以添加方法并为它们提供合理的默认实现。这样子类就不明智了,也不会受到变化的影响。 |
5
0
抽象基类最好在内部使用,以满足您自己的需要。当你在写一些需要与他人代码接口的东西时,接口会更好。主要原因是C不支持多重继承。
例如,如果您提供
|
Schadre · C-plus编码错误 2 年前 |
Nithin K · 即使类属性的类型正确,也会获取异常 2 年前 |
amirreza870 · Python OOP-更改类文本 2 年前 |
A_K · 使用cat或打印方法打印部分内容的子集闭包 2 年前 |
Mo Fatah · 如何使用Python类打印数独板? 2 年前 |