继承类时如何实现父类回调并仅暴露必填name参数
Dart子类构造函数隐藏父类必填参数的实现方案
完全可行,通过子类构造函数的初始化列表即可实现,同时能阻止用户传入callback参数,具体实现如下:
核心思路
子类定义仅接收name参数的构造函数,在初始化列表中调用父类构造时,传入子类自行实现的callback逻辑,不对外暴露callback参数入口。
代码示例
基础实现
class Sub extends Super { // 子类构造函数仅要求传入name参数 const Sub({required super.name}) // 初始化列表中传入子类自定义的callback : super(callback: () { // 这里编写子类专属的callback逻辑 print("子类的callback被触发"); }); }
更规范的实现(抽离callback逻辑)
如果callback逻辑较复杂,可抽离为静态方法,提高代码可读性:
class Sub extends Super { // 子类内部的callback实现,私有化避免外部调用 static void _subCallback() { print("子类的静态callback被触发"); } const Sub({required super.name}) : super(callback: _subCallback); }
效果说明
- 用户实例化
Sub时,只能传入name参数,无法指定callback,完全由子类控制该逻辑。 - 保持了父类
const构造的特性(如果需要),符合Dart的常量构造规范。
内容的提问来源于stack exchange,提问作者Neigaard
相关产品推荐
相关产品推荐

