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年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。