【 Flutter 】Flutter を 基礎 から 学習 ( Dart編 ) part16 クラス
「基礎 から 学ぶ Flutter 」という書籍で 学習 したことを ブログでアウトプットしていこうと思います。今回は Dart編 ( part16 )です。
前回
【 Flutter 】Flutter を 基礎 から 学習 ( Dart編 ) part15 クラス
クラスの学習の続きとなります。
クラス
継承
extends
キーワードを使用してクラスを継承することができます。
super
を使用すると継承元のクラスのメソッドやフィールドにアクセスできます。
Javaと同じですね。
インスタンスメソッドをオーバーライドすることができます。
※本書ではちょくちょくゲッターとセッターを「メソッド」と区別して記載しているのですが意図があるのでしょうか?
オーバーライドする際、@override
アノテーションを使用できます。
使用しなくてもオーバーライドとして機能します。
// 継承元
class Television {
void turnOn() {
print('テレビオン!');
}
void turnOff() {
print('テレビオフ!');
}
}
// 継承先
class SmartTelevision extends Television {
// アノテーションを使用し明示的にオーバーライドできます。
@override
void turnOn() {
print('テレビを華麗にオン♪');
}
// アノテーションを使用しなくても問題ありません。
void turnOff() {
print('テレビを華麗にオフ♪');
}
// 継承元の機能を呼び出す場合はsuperキーワードを使用します。
void legacyTrunOn() {
print('---親の動作呼び出し---');
super.turnOn();
print('---------');
}
}
void main() {
var a = SmartTelevision();
a.turnOn();
a.turnOff();
a.legacyTrunOn();
}
オーバーライドするメソッドのパラメータについて、Dartではcovariant
キーワードを用いることでサブタイプ(サブクラス?)の型に強制することができます。
これは面白い機能ですね。
class Animal {
void chase(Animal x) {
print(x.runtimeType);
}
}
class Mouse extends Animal {}
class Cat extends Animal {
// 継承元はAnimal型を許容していますが、
// 継承先はAnimalのサブクラスをしています。
@override
void chase(covariant Mouse x ) {
print(x.runtimeType);
}
}
void main() {
var a = Cat();
a.chase(Mouse());
// CatクラスのchaseではAnimalクラスを引数にすることはできません。
//a.chase(Animal());
}
最後に
オブジェクト指向については多少勉強しているのでなんとか理解することができました。
covariantとはどのような使い道になるのでしょうかね?
今日はここまで!
ディスカッション
コメント一覧
まだ、コメントがありません