Scala - 封闭特质的孙子类

4
在尝试使用密封特质时,我惊奇地发现如果在一个文件中写下如下代码:
sealed trait Sealed
trait SealedChild extends Sealed
并在另一个文件中写下如下代码:
trait SealedGrandchild extends SealedChild
编译此代码会成功。为什么SealedGranchild可以被定义,即使它有一个密封的祖先类型在另一个文件中?除了显式声明 SealedChild sealed外,是否有一种方法可以防止在其定义之外的文件中扩展SealedChild

不将“SealedChild”标记为“sealed”就明确表示您希望允许在其他文件中扩展它。 - Alexey Romanov
1个回答

6
< p > sealed修饰符仅适用于Sealed的直接子类,它不会传播到整个继承树。在所有情况下都传播它将非常限制,因此您必须为要封闭的每个级别重复使用该修饰符。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接