Dart中implements的作用:为何不直接创建新类?
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

