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年11月2日Pythonの「なるほど!」と思えるユニークな機能④
山崎講師2025年11月2日Pythonの「なるほど!」と思えるユニークな機能③
山崎講師2025年11月2日Pythonの「なるほど!」と思えるユニークな機能②
山崎講師2025年11月2日Pythonの「なるほど!」と思えるユニークな機能①