|
1
6
一个接口提供了最抽象的概念;您没有绑定到任何特定的实现(如果由于其他原因,实现必须有一个不同的基类,那么这很有用)。
对于真正的多态性,
当然,你可以把这两个混合起来:
当有许多常见的实现细节时,公共基类是有用的,纯粹通过接口复制是毫无意义的;但有趣的是,如果实现将
从未
根据实现的不同,扩展方法提供了一种在
|
|
2
2
以上三项都是有效的,并且都是有用的。 没有“最好”的技巧。只有编程实践和经验才能帮助您在正确的时间选择正确的技术。 所以,选择一个现在看来合适的方法,然后实现。 注意什么有效,什么失败,吸取教训,然后再试一次。 |
|
|
3
2
由于以下几个原因,通常倾向于使用接口:
也就是说,如果您想利用公共函数,您可以使用多态性接口(让您的方法接受接口),但是使用抽象基类来共享一些行为。
将是您的界面
将是您的默认实现
是一个重用实现的类。 不过,您将使用接口来实现多态性:
注意,我们在方法中使用的是接口。 |
|
4
1
您应该问的第一件事是“为什么我需要使用多态性?”因为多态性本身并不是结束的,而是达到目的的一种手段。一旦你的问题定义好了,就应该更清楚地使用哪种方法。 不管怎样,您所评论的这三个问题并不是独占的,如果您只需要在一些类之间重用逻辑,而不需要在其他类之间重用逻辑,或者需要一些不同的接口,那么您仍然可以将它们混合在一起… |
|
|
5
1
|
|
|
6
0
它实际上取决于你想要如何构造你的代码以及你想要用它做什么。 从测试的角度来看,拥有一个类型为interface的基类是很好的,因为您可以使用模拟对象来替换它。 如果您希望在某些函数中实现代码,而不是在其他函数中实现代码,那么抽象类实际上就是一个接口,就像抽象类除了抽象函数之外没有其他任何东西一样。 记住,抽象类不能被实例化,因此对于工作代码,必须有一个派生自它的类。 实际上,一切都是有效的。 如果我有很多类是从抽象类派生的,但是在一个较浅的层次上(比如只有一个类向下),我倾向于使用抽象类。 如果我期望有一个深层次的继承,那么我将使用一个带有虚拟函数的类。 因此,最好保持类的简单性,以及它们的继承性,因为它们越复杂,就越有可能引入bug。 |
|
|
Eris · 纯虚拟成员有什么优势吗(除了他们可能防止的人为错误)? 3 年前 |
|
|
James Nguyen · Java多态性:为什么返回错误? 8 年前 |
|
|
Alex Cristea · 如何从另一个类的数组中打印特定行 8 年前 |
|
juztcode · C语言中的静态和动态分辨率++ 8 年前 |
|
|
Hugo · 具有多态关系的活动记录获取关联模型 8 年前 |
|
|
pooya13 · 机器代码层上虚函数和条件执行的区别 8 年前 |
|
|
Nisba · C中子类类型未知的模型类/子类++ 8 年前 |
|
|
R zu · 使用多次调用的可替换方法初始化 8 年前 |