如果你有Traits,你会停止使用接口,抽象基类和多重继承吗?

时间:2011-07-28 18:31:01

标签: perl scala roles smalltalk traits

看起来Traits可以完全取代接口,抽象基类,混合和多重继承,只留下Traits和具体的继承。

这是意图吗?

如果你有特征,你应该使用哪些其他代码构造结构?

(角色是Traits的Perl名称。)

4 个答案:

答案 0 :(得分:2)

至少对于Perl的Moose来说,没有接口,所以角色明显包含那些,通常也是mixin。我会说抽象基类仍然存在一个案例。角色可以被视为的对象,其中类是

通过这种推理,仍然可以有效地使用抽象基类。 URL就是一个例子。可以很容易地为URL提供抽象基类。 IO流可能不同,可能更好地作为角色,因为它定义了事物的行为而不是它们的行为。

但是,在使用角色时,我还没有看到任何明确需要来自多个类的真正多重继承。

答案 1 :(得分:1)

此时我没有使用接口或抽象类,但是mixins和多继承实际上是由启用,因此强烈建议使用这些范例。检查整个集合库,查看可以使用这些想法构建的非常丰富的类。

啊,我的评论反映了 Scala - 我没有意识到你用多种语言标记了这一点。

答案 2 :(得分:0)

当你实现特质时;它消耗了一个classe。 所以不论表现力如何;您仍然可以使用遗留构造来防止jar中的类爆炸(以及开始时间)。

我让其他人回答有关表达性的问题:)

答案 3 :(得分:0)

我在这里只谈论Scala ......

阅读this