【发布时间】:2012-06-02 04:48:57
【问题描述】:
我有一个关于如何在不允许多重继承的语言中处理以下场景的理论问题。
假设我有一个基类 Foo,我希望从中创建三个子类:
- 类Bar继承Foo并实现功能“A”
- 类Baz继承Foo并实现功能“B”
- 类Qux继承Foo并实现功能“A”和“B”
想象一下,实现功能“A”和“B”的代码总是相同的。有没有办法只为“A”和“B”编写一次代码,然后让适当的类应用(或“继承”)它?
【问题讨论】:
-
任何特定的语言?爪哇? C#?还有什么?
-
为什么你不在你的 FOO 类中实现相同的功能,而只是将 A/B 标记为虚拟/可覆盖?
-
@Tudor 正在考虑使用 C#,但任何不允许多重继承的 OOP 语言都可以。
-
@YavgenyP - 假设 FOO 和后代用于连接到服务器,功能 A 提供了一种添加到标准 FOO 连接机制并允许经过身份验证的请求的方法。覆盖连接方法可以解决问题,但我必须在 BAR 和 QUX 中都进行覆盖。如果代码相同,我最终会得到两个副本。希望有一个我不知道的更优雅的解决方案。
-
@Mr_Creosote:我放 C# 和 Java 标签只是为了获得浏览量,因为你原来的两个标签不那么受欢迎。
标签: c# java oop inheritance