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

为何Dart编译器允许继承abstract interface class而不报错?

关于Dart中abstract interface class可被继承的解释

你遇到的情况完全符合Dart的语法规则——abstract interface class既可以通过implements实现,也可以通过extends继承,这和你最初的理解偏差源于Dart对这类类的定位:

  • abstract interface class的核心是定义接口契约,要求所有遵循它的类必须实现所有抽象成员,但它并没有限制只能用implements来遵循契约。
  • 用extends继承这类类时,子类会继承父类的抽象成员约束,只要在子类中完成所有抽象方法的实现(比如你代码里的MyClassExt),编译器就不会报错。
  • 而implements是另一种遵循契约的方式,它要求子类重新声明并实现所有接口成员,即便父类有具体实现(你的例子里都是抽象方法,所以两种方式表现相近)。

你的测试代码合法,整理后的代码如下:

void main() {
  MyClassImpl();
}

abstract interface class MyClass {
  int return4();
}

class MyClassExt extends MyClass {
  @override
  int return4() => 4;
}

class MyClassImpl implements MyClass {
  @override
  int return4() => 4;
}

简言之,Dart的abstract interface class并没有禁止继承,它更侧重接口的契约属性,同时保留了类的继承能力。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 14:03:11