はじめてのJava ~継承編~
スポンサーリンク
継承はオブジェクト指向でとても重要な機能なのでしっかり覚えましょう。
継承とは
継承とはあるクラスの状態と動作を別のクラスが引き継ぐことです。
継承をすることによって、コードの効果的な再利用ができるようになります。
例えば消防車とトラックは両方とも車です。
したがって赤い文字の部分は共通しています。
そこで、車クラスを実装することで、消防車クラスとトラッククラスの実装が楽になります。
車クラスのような継承される側のクラスをスーパークラス、消防車クラスやトラッククラスのような継承する側のクラスをサブクラスと言います。
Javaにおける継承の方法
まず車クラスを用意しました。
class Car { int tire; int handle; int accelerator; int brake; void move() { System.out.println("The car is moving."); } void turn() { System.out.println("The car is turning."); } }
継承は「extends」によって行います。
class FireTruck extends Car { // 継承 int hose; void sprayWater() { System.out.println("The fire truck is spraying the water."); } }
class Main { public static void main(String args[]) { FireTruck ft = new FireTruck(); ft.move(); ft.turn(); ft.sprayWater(); } }
// 出力 The car is moving. The car is turning. The fire truck is spraying the water.
MainクラスではFireTruckクラスのオブジェクトを生成していますが、スーパークラスのmove()メソッドとturn()メソッドも呼び出すことができていますね。
オーバーライド
先程はFireTruckクラスのオブジェクトを生成し、Carクラスのメソッドを呼び出しました。
しかし、出力は「The car is moving.」となっています。
これだと消防車なのかわかりません。
そこでオーバーライドをします。
オーバーライドとはスーパークラスのメソッドをサブクラスのメソッドによって上書きすることです。
オーバーライドをすることで、スーパークラスのメソッドはサブクラスのオブジェクトから見えなくなります。
オーバーライドのやり方を見てみましょう。
class FireTruck extends Car { int hose; void sprayWater() { System.out.println("The fire truck is spraying the water."); } // オーバーライド void move() { System.out.println("The fire truck is moving."); } // オーバーライド void turn() { System.out.println("The fire truck is turning."); } }
// 出力 The fire truck is moving. The fire truck is turning. The fire truck is spraying the water.
これでCarクラスで定義したメソッドもFireTruckクラス用に修正することができました。
ちなみにオーバーライドに似た言葉でオーバーロードというものがあります。
こちらの記事で説明していますので、知らない方は読んでみてください。