#目的
- ポリモーフィズムの理解を深める
#実際の手順と実例
###1.ポリモーフィズムとは
同じクラスを継承した別々のクラスのオブジェクトの同じメソッドを呼び出した時に、それぞれのオブジェクトの振る舞い(処理)を変えることです。
下記の例をもとに見ていきます。
###2.例題
サンプルを作成しました。
まずは親クラスの作成をします。
Jump.java
package practice.jump;
public class Jump {
// フィールドメソッドを定義
private String name;
protected String dream;
// コンストラクタを作成
public Jump(String name, String dream) {
this.name = name;
this.dream = dream;
}
// final修飾子をつけることで他で使えなくする(オーバーライド禁止)
final public String getName() {
return this.name;
}
// それぞれ子クラスで使うメソッドを作成
public String getDeream() {
return this.dream;
}
public String getProfile() {
return "俺の名は" + this.name + "!" + this.dream + "に俺はなる!!";
}
}
続いて子クラスを2つ準備します。
Onepiece.java
package practice.jump;
//親クラスを継承
public class Onepiece extends Jump{
// 新たにフィールドを宣言
private int count;
// コンストラクタを作成
public Onepiece(String name, String dream, int count) {
super(name, dream);
this.count = count;
}
// メソッドを作成
public String getProfile() {
// ここで新たに値を作成(異なる結果になる値)
String profile = super.dream + "に俺はなる!!";
profile += "仲間" + this.count + "人は欲しいな";
// 戻り値を設定
return profile;
}
}
Naruto.java
package practice.jump;
public class Naruto extends Jump {
private String skill;
public Naruto(String name, String dream, String skill) {
super(name, dream);
this.skill = skill;
}
public String getProfile() {
String profile = super.dream + "に俺はなる!!";
profile += "世界を救った術は" + this.skill;
return profile;
}
}
最後に実行ファイルを作成します。
Jump01.java
package practice.jump;
public class Jump01 {
public static void main(String[] args) {
// 子クラスでで意義したデータ型に当てはめる
Jump hero1 = new Onepiece("ルフィ", "海賊王",10);
System.out.println(hero1.getProfile());
// それぞれ子クラスで定義したデータが出力される
Jump hero2 = new Naruto("ナルト", "火影","逆ハーレムの術");
System.out.println(hero2.getProfile());
}
}
実行結果は以下の通り、
同じメソッドで呼び出しているのに
オブジェクトの処理がそれぞれ変わりました!
海賊王に俺はなる!!仲間10は欲しいな
火影に俺はなる!!世界を救った術は逆ハーレムの術