簡體   English   中英

命名繼承的構造函數,不在dart中接受參數

[英]Named inherited constructor not taking arguments in dart

我試圖繼承一個帶有命名構造函數的dart類,我想通過子類使用super和命名構造函數將數據傳遞給父類。

我嘗試了很多變化,但這應該根據文檔工作。 我正在使用Dart 2.0。 注意:如果我有一個參數而不是命名構造函數,它可以工作。

class Person {

  String firstname;
  String lastname;
  String city;

//empty constructor
  Person();

//named constructors
  Person.setfirstlast(String firstname, String lastname);

//setters and getters ...
}

class Worker extends Person{

  String company;
  String title;
  double salary;
  String _memo;

  //empty constructor
  Worker(){
    _memo = "Great Worker";
  }

  //create named constructor  - WHY WILL SUPER.setfirstlast NOT WORK?

  Worker.setWorkerInfo( this.company, this.title, this.salary) :
     super.setfirstlast(firstname, lastname)
  {
      _memo = "Great Worker"; 
  } 
  //setters and getters ...
}

這是錯誤消息。

字符串firstname只能訪問靜態成員

initializers.dart(implicit_this_reference_in_initializer)

String lastname只能訪問靜態成員

initializers.dart(implicit_this_reference_in_initializer)

提前致謝!


** 答案 **

對於那些感興趣的人,我找到了解決方案,這就是你編碼的方式。 Dart聲明構造函數而不是繼承,但也包括super。

1分鍾的解釋是,您實際上在子項中創建了一個新的構造函數,其中包含基類中的字段。 注意,您對子字段使用“this”,並在實際構造函數中使用數據類型和占位符作為繼承字段。 在這種情況下,String fn和String ln。 占位符然后通過超級帶來。

  Worker.setWorkerInfo( this.company, this.title, this.salary, String fn, String ln) :
     super.setfirstlast(fn, ln)
  {
      _memo = "Great Worker"; 
  } 

super.setfirstlast(firstname, lastname)引用firstnamelastname 這些不是 Worker.setWorkerInfo構造函數的參數,並且它們不在周圍的詞法范圍中聲明,因此它們隱式引用this.firstnamethis.lastname

你不能在構造函數初始化列表中引用this ,這是錯誤試圖告訴你的......只是不是很成功,因為它不會告訴你你在做什么,只是你必須做的事情。

您可能希望將String firstname, String lastname作為參數添加到Worker.setWorkerInfo構造函數中。

它與構造函數碰巧被命名的問題無關。 對於未命名的構造函數,也會出現同樣的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM