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

Dart中Interface能否被继承?实测与官方文档不符的原因求解

问题:Dart中标记为interface的类为何能被继承?

官方文档说明Dart的interface修饰的类不可继承,但在Android Studio和Dart Pad中测试时却能执行继承操作,这是为什么?我期望符合文档描述的行为,请问我哪里操作出错了?


解答

核心原因:混淆了Dart版本与interface修饰符的实际规则

  • interface修饰符的真正作用
    按照Dart官方定义,interface修饰符标记的类仅允许被实现(implements),不允许被继承(extends)。若在合规环境下尝试用extends继承该类,会直接触发编译报错。

  • 测试能运行的关键:Dart版本过低
    interface是Dart 3.0才正式引入的类修饰符。如果你的Android Studio或Dart Pad使用的Dart版本低于3.0,编译器会直接忽略interface关键字,将该类当作普通类处理——普通类自然可以被extends继承,这就导致你看到了“违背文档”的结果。

  • 验证正确行为的方法

    1. 确保Dart环境升级到3.0或更高版本
    2. 尝试用extends继承interface类,此时编译器会抛出类似错误:
      Error: The class 'A' can't be extended, it's an interface class.
      class B extends A {
            ^
      
    3. 若要遵循interface类的设计意图,应使用implements实现它:
      interface class A {
        void a(); // 接口方法通常定义为抽象方法
      }
      
      class B implements A {
        @override
        void a() {
          // 自定义实现逻辑
        }
      }
      

内容的提问来源于stack exchange,提问作者Artem Pronenko

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 03:42:19