040-オブジェクトの拡張-継承とオーバーライド【新人エンジニアが最初に覚えたい100のJava文法】
ユーチューブ動画
継承とオーバーライドについて解説します。
ソースコード
class Product { private String productName; private int price; public Product(String productName, int price) { this.productName = productName; this.price = price; } public void showData() { System.out.println(this.productName); System.out.println(this.price); } } class Printer extends Product { private int printSpeed; public Printer(String productName, int price, int printSpeed) { super(productName, price); this.printSpeed = printSpeed; } public void showData() { super.showData(); System.out.println(this.printSpeed); } }
解説
継承とオーバーライドについて解説します。
共通したクラスを作るときには、継承を利用します。
継承するとサブクラスは、スーパークラスの内容を引き継ぎますが、場合によっては、一部だけを改良したいということもでてきます。
そのとき、今回ご紹介するオーバーライドを使うと、必要な差分だけをプログラミングすることができます。
サンプルコードを確認しましょう。Productクラスを継承して、Printerクラスが定義されています。
Productクラスがスーパークラス、Printerクラスがサブクラスになります。
オーバーライドを成立させるためには、戻り値の型、メソッドの名前、引数リストを同じにします。
showDataメソッドに注目すると、同じになっています。つまり、showDataメソッドはオーバーライドしているといえます。
オーバーライドすると、メソッドの処理を上書きしてしまいます。
スーパークラスの処理も実行したいというときには、super.〜と記述することで、
スーパークラスのメソッドを呼び出すことができます。
PrinterクラスのインスタンスからshowDataメソッドを呼び出すと、
まずはサブクラスのshowDataメソッドが呼び出されて、super.showDataが実行されます。
メンバ変数のproductNameやpriceを出力すると、サブクラスのメソッドに戻ってきます。
サブクラスのメンバ変数であるprintSpeedを出力して、終了します。
サンプルコードにはありませんが、Productクラスを継承する別のクラスを定義しても、同じように差分をプログラミングすることができます。
ここではご覧のようなComputerクラスを作成しました。
メンバ変数に周波数が定義されています。
Printerクラスと同じようにshowDataメソッドをオーバーライドして、差分をプログラミングすることができます。
いかがでしたか?オーバーライドはメソッドの処理の上書きです。
戻り値の型・メソッドの名前・引数リストが同じとくれば、オーバーライドと覚えておきましょう。
以上、継承とオーバーライドについて解説しました。
このサンプルコードをJavaタッチタイプゲームとして遊ぶことができます。