0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Dart extend / implement / with / on 違い

Posted at

extends vs implements vs with vs on

extends implements with on
対象 - class
- abstract class
- class
- abstract class
- abstract interface
- mixin - class
- mixin
複数指定 不可 不可
親の具象メソッド 引き継ぐ
オーバーライドも可能
引き継がない
オーバーライドが 強制される
引き継ぐ 引き継ぐ
親の抽象メソッド 実装を強制されない 実装を 強制される 実装を 強制される 実装を強制されない
super の使用
(親クラスへのアクセス)
不可 不可 不可

@override

https://dart.dev/language/extend#:~:text=The%20return%20type,a%20generic%20one.

オーバーライドする時の注意点

  • 戻り値は、元の定義と同じクラスか、サブクラスに限定される
  • 引数は、元の定義と同じクラスか、スーパークラスに限定される
  • ジェネリックを使ったメソッドは、非ジェネリックとしてオーバーライドできない
  • ジェネリックを使わないメソッドは、ジェネリックと使うメソッドとしてオーバーライドできない

abstract キーワード

Flutter の abstract キーワードが使える対象は以下の通り。

  • クラス
    • 抽象クラスの定義(abstract class MyAbstract {}
  • フィールド
    • ただし、抽象クラス内での使用に限る(通常クラス内で抽象メソッドは定義できない)
    • サブクラスで getter / setter の実装が強制される(フィールドのオーバーライドでも可)

抽象メソッドは抽象クラスもしくは mixinabstract で定義したクラス。abstract interface class でも良いが、interface class ではダメ。)でしか定義することができない。

抽象クラス
abstract class MyAbstract {
}

抽象メソッド
abstract class MyAbstract {
  void method();
}

abstract interface class MyInterface {
  void method();
}

mixin MyMixin {
  void method();
}
抽象フィールド
abstract class MyAbstract {
  abstract int x;
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?