1. 程式人生 > 其它 >flutter學習筆記之Dart-6建構函式和私有屬性、私有方法

flutter學習筆記之Dart-6建構函式和私有屬性、私有方法

技術標籤:flutter

一、構造方法
class Student {
  String name;
  int age;
  String school;

  //預設建構函式
  Student(String name, int age, String school) {
    this.name = name;
    this.age = age;
    this.school = school;
  }

  //預設建構函式簡寫
  Student(this.name, this.age, this.school);

  //命名建構函式
  Student.setMsg1(String name, int age) {
    this.name = name;
    this.age = age;
  }

  //命名建構函式簡寫
  Student.setMsg1(this.name, this.age);

  Student.setMsg2(this.name, this.age, this.school);

  void getMsg() {
    print('我叫$name,今年$age歲,在$school上學.');
  }
}

注意:預設建構函式只能有一個,命名建構函式可以有多個。

Student student = Student("張三", 20, '北京大學');
student.getMsg();
student = Student.setMsg2('李四', 21, '清華大學');
student.getMsg();

結果如下:

我叫張三,今年20歲,在北京大學上學.
我叫李四,今年21歲,在null上學.

二、私有屬性和私有方法

新建一個student.dart檔案,建立下述程式碼
class Student {
  String _name;//私有屬性
  int age;
  String school;

  Student(this._name, this.age, this.school);
  

  void _getMsg() {//私有方法
    print('我叫$_name,今年$age歲,在$school上學.');
  }
}

此時私有屬性和私有方法都無法訪問,如下圖:

為上述Student類中的私有屬性_name新增set和get方法,用於外部訪問。

class Student {
  String _name;//私有屬性
  int age;
  String school;

  Student(this._name, this.age, this.school);


  void _getMsg() {
    print('我叫$_name,今年$age歲,在$school上學.');
  }

  String get getName => _name;//獲取私有屬性

  set setName(String name) {//設定私有屬性
    _name = name;
  }
  
  void showMsg(){//呼叫私有方法
    _getMsg();
  }
}

使用程式碼如下:

Student student = Student("張三", 20, '北京大學');
print(student.getName);
student.showMsg();
student.setName='李四';
student.showMsg();

執行結果如下:

三、在建構函式之前初始化例項變數

class Student {
  String _name;//私有屬性
  int age;
  String school;

  // Student():_name='馬保國',age=50,school='太極傳承學院';
  //下面這種寫法可以用於驗證是先例項化還是先初始化資料
  Student():_name='馬保國',age=50,school='太極傳承學院'{
    print(_name);
    print(age);
    print(school);
  }

  void _getMsg() {
    print('我叫$_name,今年$age歲,在$school上學.');
  }

  String get getName => _name;

  set setName(String name) {
    _name = name;
  }

  void showMsg(){
    _getMsg();
  }
}

使用

Student student = Student();
student.showMsg();

執行結果如下: