0Pricing
Dart Academy · レッスン

抽象クラスと抽象メソッド

サブクラスが実装すべき内容を定義する

「抽象クラスと抽象メソッド」はCoddyKit上の無料Dart Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDart Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Dart Academyコースには全4レッスンが含まれています。

abstractの意味

抽象クラスは設計図として記述できますが、直接作成することはできません。単独でインスタンス化するのではなく、拡張されるために存在します。

クラスをabstractとして指定する

abstractキーワードをclassの前に追加します。これにより、そのクラスが未完成であり、共有される基底クラスとして使われることをDartに伝えます。

abstract class Shape {
  double area();
}

抽象メソッドには本体がない

抽象メソッドは名前とシグネチャを宣言しますが、セミコロンで終わり、実際の処理は各サブクラスに任せます。

abstract class Shape {
  double area(); // no body
}

インスタンス化できない

Shape()と記述しようとするとコンパイルエラーになります。抽象クラスは未完成で、実際の実装を持たないため、Dartは拒否します。

var s = Shape(); // error: abstract

サブクラスが空欄を埋める

サブクラスはextendsを使い、すべての抽象メソッドに本体を提供する必要があります。これにより、設計図が利用可能なものになります。

class Circle extends Shape {
  final double r;
  Circle(this.r);
  double area() => 3.14 * r * r;
}

具象メソッドも使用できる

抽象クラスには、完全に記述された具象メソッドを含めることもできます。サブクラスはそれらを直接継承し、抽象メソッドだけを実装します。

abstract class Shape {
  double area();
  void describe() => print('Area is ' + area().toString());
}

抽象クラスのフィールド

抽象クラスにはフィールドやコンストラクタも保持できます。サブクラスの作成時に実行されるため、共有状態を基底クラスに置けます。

abstract class Shape {
  final String name;
  Shape(this.name);
}

コンパイラが契約を強制する

サブクラスが抽象メソッドを忘れていると、コードを実行する前にDartがエラーを報告します。契約は自動的にチェックされます。

class Square extends Shape {} // error: area() missing

抽象クラスを使う理由

抽象クラスを使うと、多くの型で1つの形状を共有しながら、それぞれが独自の動作を提供することを保証できます。明確な契約を一度設計し、あらゆる場所で再利用できます。

抽象ゲッター

抽象にできるのはメソッドだけではありません。本体のないゲッターも同じように機能し、サブクラスで定義する必要があります。

abstract class Shape {
  String get label;
}

抽象型の参照を保持する

任意のサブクラスを、抽象クラス型の変数に格納できます。具体的なクラス名を指定せずに、その動作を保証できます。

Shape s = Circle(2);
print(s.area());

クイックチェック

抽象クラスについての簡単な質問です。

まとめ

抽象クラスは拡張するための設計図であり、インスタンス化するものではありません。抽象メソッドには本体がなく、具象サブクラスが実装する必要があります。よくできました!🎯

よくある質問

「抽象クラスと抽象メソッド」レッスンは無料ですか?

はい。「抽象クラスと抽象メソッド」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Dart Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Dart Academyコースには全4レッスンが含まれています。

「抽象クラスと抽象メソッド」で何を学びますか?

サブクラスが実装すべき内容を定義する ブラウザで直接実行するハンズオンコードでDart Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Dart Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのDart Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「抽象クラスと抽象メソッド」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このDart Academyレッスンでコードを書いて実行できますか?

はい。すべてのDart Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 抽象クラスと抽象メソッド
  2. 暗黙的インターフェースとimplements
  3. 共有型によるポリモーフィズム
  4. 継承よりコンポジション
← Dart Academyに戻る