ポリモーフィズムを説明するために、サイヤ人クラスとそれを継承した悟空クラス、ベジータクラスを作ります。
Saiyan.java(サイヤ人クラス)
//サイヤ人クラス
public abstract class Saiyan {
public void attack(){
System.out.println("サイヤ人の攻撃!");
}
public void skill(){
System.out.println("必殺技!");
}
public void destroyTheStar(){
System.out.println("星を破壊する!");
}
}
Goku.java(悟空クラス)
//悟空クラス
public class Goku extends Saiyan{
public void attack(){
System.out.println("悟空の攻撃!");
}
public void skill(){
System.out.println("かめはめ波!");
}
public void work(){
System.out.println("悟空は働いた!");
}
}
Vegeta.java(ベジータクラス)
//ベジータクラス
public class Vegeta extends Saiyan{
public void attack(){
System.out.println("ベジータの攻撃!");
}
public void skill(){
System.out.println("ギャリック砲!");
}
public void work(){
System.out.println("ベジータは働いた!");
}
}
最初に定義したクラスを基に悟空インスタンスとベジータインスタンスを生成して、skill
メソッドを実行してみます。
Java
//悟空とベジータをインスタンス化。
Saiyan s1 = new Goku();
Saiyan s2 = new Vegeta();
//悟空
s1.skill();
//ベジータ
s2.skill();
実行結果
かめはめ波!
ギャリック砲!
では、悟空クラスとベジータクラスが持つwork
メソッドを実行するとどうなるのかを見ていきましょう。
Java
//悟空とベジータをインスタンス化。
Saiyan s1 = new Goku();
Saiyan s2 = new Vegeta();
//悟空
s1.work();//ここでコンパイルエラー。
Java
//悟空とベジータをインスタンス化。
Saiyan s1 = new Goku();
Saiyan s2 = new Vegeta();
//悟空
Goku g = (Goku)s1;
g.work();
//ベジータ
Vegeta v = (Vegeta)s2;
v.work();
実行結果
悟空は働いた!
ベジータは働いた!
悟空インスタンスが入ったサイヤ人オブジェクトs1を間違えてベジータクラスでキャストしてしまうとClassCastException
が発生します。
Java
//悟空とベジータをインスタンス化。
Saiyan s1 = new Goku();
Saiyan s2 = new Vegeta();
//悟空
Vegeta g = (Vegeta)s1;
g.work();
実行結果
Exception in thread "main" java.lang.ClassCastException: test.Goku cannot be cast to test.Vegeta
at test.Main.main(Main.java:6)
instanceof
を使ってキャスト可能かどうかをチェックする必要があります。
Java
//悟空とベジータをインスタンス化。
Saiyan s1 = new Goku();
Saiyan s2 = new Vegeta();
//悟空がベジータとして使えるかをチェックする。
if(s1 instanceof Vegeta ){
Vegeta g = (Vegeta)s1;
g.work();
}else{
System.out.println("悟空はベジータには成れません。");
}
実行結果
悟空はベジータには成れません。
Java
//悟空とベジータをインスタンス化。
Saiyan s1 = new Goku();
Saiyan s2 = new Vegeta();
//悟空
s1.destroyTheStar();
//ベジータ
s2.destroyTheStar();
実行結果
星を破壊する!
星を破壊する!
ポリモーフィズムで大事なことは以下の3つです。
以上で記事の解説はお終い!
もっとJavaやSpringを勉強したい方にはUdemyがオススメ!同僚に差をつけよう!