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年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。
最新の投稿
全ての社員2025年7月11日【第3章:回帰分析と掛け算 ― 係数が持つ“影響力”の意味】
全ての社員2025年7月11日【第2章:期待値と掛け算 ― 平均の裏にある重みづけの構造】
全ての社員2025年7月11日【第1章:確率における掛け算 ― 依存と独立をつなぐ橋】
全ての社員2025年7月11日【割り算で“信頼”を更新する:ベイズ統計と事後確率のしくみ】