【 Flutter 】Flutter を 基礎 から 学習 ( Dart編 ) part14 クラス

2021年9月26日

基礎 から 学ぶ Flutter 」という書籍で  学習 したことを ブログでアウトプットしていこうと思います。今回は Dart編 ( part14 )です。

前回

【 Flutter 】Flutter を 基礎 から 学習 ( Dart編 ) part13 クラス

引き続きクラスの学習になります。

クラス

Abstract

Dartではinterfaceというものは存在しません。たしかPythonもありませんでしたよね。
Pythonではダックタイピングという面白い手法(?)で実装を行います。
Dart言語も同様ということでしょうか。
interfaceというキーワードが存在しないだけでインターフェイスという機能自体は「暗黙的インターフェイス」というかたちで実現されていました。

Abstractの使い方はJavaと同様のようです。
Abstractクラスをインスタンス化することはできません。(Abstractというのは「抽象」という意味を持ちます。)
Abstractクラスは「継承してもらう」ことでその効果を発揮する特別なクラスです。

Abstractメソッドを定義できます。
このメソッドを定義すると継承したクラスは「絶対に」このメソッドを実装する必要があります。

abstract class AbstractHogeClass {
  // ただのメソッドに見えますが、これがAbstractメソッドです。
  // Abstractメソッドは実装を持つことができません。セミコロンで止めます。
  void fuga();
  
  // 「実装」を持つメソッドは「普通ののメソッド」と判断されます。
  // 継承先のクラスは実装を強制されません。
  void fufufu() {
    print ('fufufu');
  }
}
// AbstractHogeClassを継承しました。
// fugaは絶対に実装しなければいけません。(未実装の場合はコンパイルエラーです。)
class HogeImplemetsClass extends AbstractHogeClass {
  void fuga() {
    print('絶対実装しないと!');
  }
}

void main() {
  // Abstractクラスはインスタンス化できません。
  // 実装を持たないメソッドが定義されることがあるのでできません。
  //var a = AbstractHogeClass();
  
  var b = HogeImplemetsClass();
  b.fuga();
}

最後に

Abstractクラスはポリモーフィズムを守るための大切な機能だと思っています。
「このクラスを継承しているなら必ずこのメソッドは使える!」という安心感もありますよね。

今日はここまで!