You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scalac未对缺失open关键字发出警告,原因何在?

Scala 3跨文件继承未触发open限制的原因分析
  • 核心原因:你把两个文件作为同一编译单元编译了。Scala 3仅限制不同编译单元之间继承未标记open的非抽象类,同一编译单元内则无此强制要求。
  • 验证规则的正确操作:要触发书籍中描述的限制,需要分开编译两个文件:
    1. 先单独编译基类文件:scalac animal.scala
    2. 再单独编译子类文件:scalac cat.scala
      此时编译器会报错,提示Animal类是final的,无法被跨编译单元继承。
  • 补充说明:Scala 3设计open修饰符的初衷是限制跨模块/跨编译单元的继承,避免外部代码随意修改内部类的行为;而同一编译单元内的代码属于同一开发上下文,编译器默认允许自由继承,兼顾封装性和开发效率。

内容的提问来源于stack exchange,提问作者Sama Rive

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 22:34:50