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タッチタイプゲームとして遊ぶことができます。
投稿者プロフィール
-
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。
最新の投稿
- 新入社員2024年11月23日「ゲシュタルト崩壊」とシステム開発
- 新入社員2024年11月23日データベースでテーブル名やフィールド名にスペースを使うことは、一般的には推奨されていません
- 新入社員2024年11月23日「データにはなぜ型が必要なのか?」を2進数の観点から解説
- 新入社員2024年11月23日ディスプレイの解像度の意味と変更方法