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

Dart中implements的作用:为何不直接创建新类?

为什么在Dart中需要使用implements关键字?

直接创建新类当然可行,但implements关键字的核心价值在于解决代码约束、多态适配、解耦设计这些关键问题,具体来说:

  • 强制遵循接口契约
    当你用implements实现某个类的接口时,Dart会强制你重写原类所有公开成员(构造函数除外)。比如例子里的Impostor必须实现greet方法,还得处理_name对应的接口要求。如果直接写新类,没有这种约束,很容易漏掉必要的方法或属性,导致后续调用出现类型错误。

  • 实现多态,统一处理不同类
    假设你有一个需要接收Person类型参数的方法:

    void interact(Person person) {
      print(person.greet('路人'));
    }
    

    不管是Person实例还是Impostor实例,只要implements Person,就能传入这个方法。如果直接写独立新类,它和Person没有类型关联,根本没法适配这个方法,代码的复用性和灵活性会大打折扣。

  • 解耦接口与具体实现
    implements让你只关注类的行为规范(接口),而非绑定到具体实现。比如后续你可以再写一个Student类也implements Person,替换Impostor时,所有依赖Person接口的代码都不用修改,完全符合面向接口编程的设计思想。

  • 复用已有类的接口定义
    Dart里每个类都隐式自带一个接口,implements就是让你的类复用这个现成的接口定义,不用重复编写相同的方法签名。直接写新类的话,你得手动复制所有需要的方法,不仅麻烦,还容易和原接口出现不一致。

举个反例,如果直接写独立的Impostor类:

class Impostor {
  String greet(String who) => 'Hi $who. Do you know who I am?';
}

它和Person没有任何契约关系,既不能被当作Person类型使用,也不会在Person新增方法时得到编译器提示,维护风险很高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 10:57:17