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继承,这就导致你看到了“违背文档”的结果。验证正确行为的方法
- 确保Dart环境升级到3.0或更高版本
- 尝试用
extends继承interface类,此时编译器会抛出类似错误:Error: The class 'A' can't be extended, it's an interface class. class B extends A { ^ - 若要遵循
interface类的设计意图,应使用implements实现它:interface class A { void a(); // 接口方法通常定义为抽象方法 } class B implements A { @override void a() { // 自定义实现逻辑 } }
内容的提问来源于stack exchange,提问作者Artem Pronenko
相关产品推荐
相关产品推荐

