在尝试学习Akka的过程中,我经常发现类层次结构与下面类似的例子:
sealed trait Message
case class TextMessage(user: String, text: String) extends Message
case class StatusMessage(status: String) extends Message
但是,在Scala docs中有以下示例:
abstract class Notification
case class Email(sourceEmail: String, title: String, body: String) extends Notification
case class SMS(sourceNumber: String, message: String) extends Notification
case class VoiceRecording(contactName: String, link: String) extends Notification
在类层次结构中,使用一个密封特征和一个抽象类(在本例中是密封抽象类)作为没有构造函数参数的基类有什么区别?使用一个比另一个有什么优势吗?
编辑:
具体来说,如果特征和抽象类都是密封的,我就不能在文件外扩展它们,对吗?在这种情况下,我也不能在Java中继承它们?如果是这种情况,密封会使建议的重复中的大多数参数变得无用,因为它们引用了文件外的继承。
1条答案
按热度按时间wgx48brx1#
在这个特定的例子中,除了不能扩展多个
abstract classes
,但是可以扩展多个traits
之外,没有什么区别。你应该检查其他的答案(如评论中提到的),看看抽象类和trait之间的实际区别。如果你只是打算像本例中那样使用
abstract class
或trait
来定义类型层次结构,那么就没有区别了。例如,您可以更改为:
但你不能这样做: