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

关于Dart重写方法时健全返回类型示例的困惑

问题解答

你忽略了两个示例里的父类Animal的parent getter返回类型根本不一样!

正确示例(HoneyBadger)的逻辑

这个例子里的父类定义是:

abstract class Animal {
  Animal get parent; // 返回类型是Animal基类
}

HoneyBadger继承自Animal,它重写parent时返回HoneyBadger——而HoneyBadger是Animal的子类型,这符合Dart的协变返回类型规则:重写方法的返回类型可以是原返回类型的子类型,这种写法不会破坏类型安全,所以被判定合法。

错误示例(Root)的逻辑

这个例子里的Animal类和第一个完全不同,它的定义是:

abstract class Animal {
  HoneyBadger get parent; // 返回类型是HoneyBadger子类
}

Root虽然是Animal的子类,但Root并不是HoneyBadger的子类型。重写时返回Root,相当于把返回类型改成了原返回类型(HoneyBadger)的无关类型,违反了健全类型系统的规则,所以被判定错误。

简单说:两个例子看似逻辑一致,实则父类方法的返回类型完全不同,一个是基类、一个是特定子类,这才导致了结果差异。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 15:26:33