📑

コンストラクタについて

に公開

結論

コンストラクタとは、クラスをインスタンス化した時に実行される関数である。
オブジェクトの初期化処理を行い、必要な引数を要求している。

クラス、インスタンス、オブジェクトのおさらい。

オブジェクト・・・モノ(実体があるもの)という概念。
クラス・・・オブジェクトの設計図
インスタンス・・・クラスをオブジェクトとして実体化したもの。
→インスタンスそのものをオブジェクトと呼ぶ。
※クラスやクラスのプロパティをオブジェクトと呼ぶ考え方もあるとか。基本は上記の考え方で問題ないものと考える。

下記コードで、クラスをインスタンス化している。

void main() {
  // Personクラスのインスタンス化(Personオブジェクトを変数のpに格納)
  Person p = Person();
  // hello
  p.hello();
}

// personクラス
class Person{
// プロパティ
String? name;
// メソッド
  void hello () {
    print("hello");
  }
}

本題のコンストラクタについて。

下記コードにてコンストラクタを実装している。

void main() {
  // Personクラスのインスタンス化(Personオブジェクトを変数のpに格納)
  Person p = Person("tom",12);
  // Hello! my name is tom. I'm 12 years old.
  p.hello();
  p = Person("Ai",100);
  // Hello! my name is Ai. I'm 100 years old.
  p.hello();
}

// personクラス
class Person{
  // コンストラクタ
  Person(String name,int number){
    // thisは、現在のインスタンス(Personクラス)を示している。
    // this.nameは、Personクラス内のnameプロパティを示している。
    this.name = name;
    age = number;
  }
  // プロパティ
  String? name;
  int? age;
  // メソッド
  void hello () {
    print("Hello! my name is ${name}. I'm ${age} years old.");
  }
}

▼初期化の順序
1.プロパティの初期化
2.コンストラクタの呼び出し。
3.インスタンス変数に対して明示的に指定された初期化リストで初期化;
4.初期化ブロックで初期化

コンストラクタを指定したことで、Personオブジェクトに引数を要求する。
インスタンスされるたびに初期化されるので、値が更新される。

Discussion