为什么在我将字段设为final并创建构造函数后,我必须在类中实现setter,在dart中实现抽象类?

问题描述 投票:0回答:1

我做了这个抽象类

abstract class API {
  //* ---- abstract fields , Methods ---- *//
  int? timeOut;
  int? getTimeOut();
}

然后我用一个类来实现它并使其成为最终的

class GetData implements API {
   @override
  final int? timeOut; 


  GetData(int? ta) : timeOut = ta;

  @override
  int? getTimeOut() {
    return timeOut;
  }

   @override
  set timeOut(int? _timeOut) {
    timeOut = _timeOut;
  } 
}

所以我的问题是,即使类有构造函数,如果我不实现 setter,为什么会出现错误?

dart abstract-class
1个回答
0
投票

在 Dart 中,非

final
字段隐式相当于提供具有该字段名称的 getter 和 setter。
final
字段隐式相当于提供一个没有 setter 的 getter。

因此,您的基类提供了一个带有 getter setter 的接口。但是,当您尝试使用派生类中的

final
字段覆盖它时,您不再提供隐式 setter,现在您的派生类将不再实现基类所需的接口(因此派生类将不再提供可替代,其中需要基类)。这是不允许的,因此您会收到编译时错误。

© www.soinside.com 2019 - 2024. All rights reserved.