続・クラス説明
今回は前回のクラス説明に引き続き、継承などの内容を取扱いたいと思います。
継承ってなんだ?
前回はクラスは設計図のようなものだと言いました。
その例として車を挙げましたが、一概に車と言っても様々な種類があります。
- バス
- 二輪車
- トラック
- その他たくさん...
では自転車のクラスを作りましょう!...となっても一から作り直すのは面倒くさいですよね!
何とかして以前作った車クラスを応用できないものでしょうか。実はそんな素敵な方法があるんです!
それが継承です.イメージとしては元の仕様書をコピーして一部を書き換えたり、要素を追加したりすることが出来ます。
継承元(車クラス)のことを親クラス(スーパークラス)と呼び、
継承先(自転車クラス)のことを子クラス(サブクラス)と呼びます。
継承 -> 設計図をコピーして書き換えたり、手を加えること
継承元(車) = 親クラス(スーパークラス)
継承先(自転車) = 子クラス(サブクラス)
継承を使ってみよう!
まずは継承
// 車の設計図(クラス)
class Car{
// 高さと横幅と長さ、何人乗りかを変数にする
float hight, width, length;
int seat_num;
// 車をデータを元に作ってくれるやつ(コンストラクタ)
Car(float _h, float _w, float _l, int _s){ // 引数にデータを入力しよう
hight = _h;
width = _w;
length = _l;
seat_num = _s;
}
void run(){
// 車が走る処理
}
void stop(){
// 車が止まる処理
}
}
これが以前作った車クラスです。とりあえず車クラスを継承した自転車クラスを作ってみましょう!
class Bicycle extends Car{
// 継承元のクラスの変数と関数が中に入ってる!(本当は見えていない)
// float hight, width, length;
// int seat_num;
// void run(){
// // 車が走る処理
// }
// void stop(){
// // 車が止まる処理
// }
}
上の時点でコンストラクタ以外の変数、関数が全て引き継がれます。
変数追加
自転車には電動自転車という便利なものがあるらしいですね!
というわけで電動自転車かそうでないかを示す変数を追加してみましょう!
class Bicycle extends Car{
// 電動自転車か否かを示す変数を追加する
boolean isElectric;
}
たったこれだけでisElectric
変数が追加されました。
コンストラクタ
次はコンストラクタを設定しましょう!自転車は一人乗りですね?(二人乗りは危険ですよ!)
また、1から書き直しても良いのですが、親クラスのコンストラクタを使いたいときは、super()
を使いましょう。
class Bicycle extends Car{
boolean isElectric;
// コンストラクタ
Bicycle(float _h, float _w, float _l, boolean _isElectric){
// 車クラスのコンストラクタはCar(height, width, length, seat_num)
super(_h, _w, _l, 1);
is Electric = _isElectric;
}
}
これでコンストラクタの設定が完了です!
オーバーライド
関数もすべて引き継がれていますが、自動車と自転車では走り方が違いますね?
車はエンジンを使いますが、自転車は足で漕いで走ります。
でももうrun()
という関数が定義されてしまっているではないですか!
大丈夫です。そんなときはオーバーライドです!
オーバーライドは親クラスで定義された関数を同じ関数名で書き換えることです。
とても簡単に出来てしまいます。
class Bicycle extends Car{
// run()をオーバーライドする
void run(){
// 自転車が走る処理
}
}
ね?簡単でしょ?
まとめ
Aクラスを継承したBクラスを作りたい!
class B extends A{}
⇒これでAクラスのコンストラクタ以外を引き継いだBクラスが出来る!
継承したクラスに変数、関数をを追加したい! ⇒ 継承したクラス内で宣言するだけ!
継承した関数を書き換えたい! ⇒ 同名の関数を宣言し直すだけ!(オーバーライド)
親クラスのコンストラクタを使いたい!
super(a, ...);
⇒引数は親クラスのコンストラクタに揃える
以上、続・クラス説明でした!