正解
2.メソッドをオーバーライドしていることを明示するため
解説動画

@override アノテーションとは?
@override は、「親クラスのメソッドを上書きしていますよ」 ということを明示するためのアノテーションです。
class Vehicle {
void move() {
print('Vehicle is moving');
}
}
class Car extends Vehicle {
@override
void move() {
print('Car is moving');
}
}
void main() {
Car myCar = Car();
myCar.move(); // 出力: Car is moving
}
この例では、親クラス Vehicle の move メソッドを子クラス Car が上書き(オーバーライド)しています。@override を付けることで、親クラスと同じメソッドを意図的に変更していることが明示されています。
クラスの継承とオーバーライドの基本
そもそも「継承」とは何でしょうか?
簡単に言うと、既存のクラスをベースにして、新しいクラスを作る ことです。例えば、親クラスを「車」、子クラスを「トラック」と考えるとわかりやすいでしょう。
class Vehicle {
void stop() {
print('Vehicle is stopping');
}
}
class Truck extends Vehicle {
@override
void stop() {
print('Truck is stopping');
}
}
void main() {
Truck myTruck = Truck();
myTruck.stop(); // 出力: Truck is stopping
}
この例では、Truck クラスが親クラス Vehicle を継承し、その stop メソッドをオーバーライドしています。
@override とクラス継承の違い
ここで間違えやすいのが、クラス継承 (extends) とメソッドのオーバーライド (@override) の違いです。
クラス継承 (extends)
- 子クラスが親クラスの機能をそのまま引き継ぎます。
extends を使うことで、親クラスのメソッドやプロパティを使用できます。
メソッドのオーバーライド (@override)
- 親クラスのメソッドの動作を子クラスで変更できます。
- 変更する際に
@override を使って明示するのがベストプラクティスです。
まとめ