042-抽象クラス-オーバーライドとポリモーフィズム 【新人エンジニアが最初に覚えたい100のJava文法】
ユーチューブ動画
オーバーライドとポリモーフィズムについて解説します。
ソースコード
abstract class Product { private String productName; private int price; public Product(String productName, int price) { this.productName = productName; this.price = price; } public abstract void showData(); } class Printer extends Product { private int printSpeed; public Printer(String productName, int price, int printSpeed) { super(productName, price); this.printSpeed = printSpeed; } public void showData() { System.out.println(this.printSpeed); } } class Computer extends Product { private double clockFeq; public Computer(String productName, int price, double clockFeq) { super(productName, price); this.clockFeq = clockFeq; } public void showData() { System.out.println(this.clockFeq); } }
解説
オーバーライドとポリモーフィズムについて解説します。
以前の動画(041-抽象クラス-抽象クラスの定義)で抽象クラスや抽象メソッドについて、解説しました。
抽象クラスでは、抽象メソッドを定義することができます。
抽象メソッドを定義すると、サブクラス側にオーバーライドすることを強制することができます。
オーバーライドについて、以前の動画でも紹介しましたが、決まりは覚えていますか?
そう、戻り値の型、メソッドの名前、引数リストを同じものにして、再定義することでした。
再定義することで、処理を上書きすることができます。
では、処理を上書きすることで、どのようなメリットができるのでしょうか。
PrinterクラスのshowDataメソッドでは、printSpeedを表示して、
ComputerクラスのshowDataメソッドでは、周波数を表示するように、メソッドをオーバーライドしています。
オーバーライドして、別々の処理になったわけです。
それらのメソッドを利用しているmainメソッドの処理に注目してください。
お互い違うクラスのインスタンスですが、
スーパークラスのデータ型の変数に代入することができています。
ここがポイントです。
サブクラスのインスタンスは、スーパークラスの変数に代入できるということです。
スーパークラスの変数に代入されたインスタンスからは、サブクラスに共通のメソッド、
ここでは抽象メソッドを呼び出すことができるようになります。
すると、同じメソッド名でもこの2行は違う動作になります。
片方は、プリントスピード、もう片方は、周波数です。
このように、同じメソッドでも異なる振る舞いを実行できる性質をポリモーフィズムといいます。
まだ、このサンプルだけでは、ポリモーフィズムのメリットを生み出していません。
さらにどんなメリットが生まれるのかについては、ぜひ、次の動画を参照ください。
この段階では、オーバーライドとポリモーフィズムはセットになっていると覚えておくとよいでしょう。
以上、オーバーライドとポリモーフィズムについて解説しました。
このサンプルコードをJavaタッチタイプゲームとして遊ぶことができます。
投稿者プロフィール
-
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。
最新の投稿
- 新人エンジニア研修講師2024年12月26日研修後のフォローアップメールをより効率的かつ効果的に活用するための「テンプレート作成のポイント」
- 新人エンジニア研修講師2024年12月26日研修講師がフォローアップメールを活用するには?
- 全ての社員2024年12月26日TOEIC 900点レベルの英熟語200選
- 全ての社員2024年12月26日TOEICで頻出する複合名詞(Compound Nouns)