お世話になります。現在javaを勉強中なのですが、clone()のオーバーライドについて2点質問があります。
① : 下記のコードを実行すると、実行エラーが出てしまうのですが、どこが悪いのかがわかりません。
② : clone()をオーバーライドする場合、そのクラスの親クラスでclone()を定義していた場合、super.clone()でインスタンスを呼ぶと思うのですが、この場合例外処理が必要になるのでしょうか?
どなたかわかる方ご教授をお願い致します。
エラー内容
Exception in thread "main" java.lang.ClassCastException: cleric.Monster cannot be cast to cleric.Hero
at cleric.Hero.clone(Hero.java:13)
at cleric.Main.main(Main.java:10)
java
1package cleric; 2public class Main{ 3 public static void main( String[] args ){ 4 Hero h1 = new Hero(); 5 Hero h2 = new Hero(); 6 h1.name = "pentagon"; 7 h1.hp = 99999; 8 h1.money = 9999999; 9 h2 = h1.clone(); 10 System.out.println( h1.name ); 11 System.out.println( h2.name ); 12 13 } 14}
java
1package cleric; 2public class Hero extends Monster{ 3 Sword s; 4 int money; 5 6 public void run(){ 7 System.out.println( "戦った!" ); 8 }; 9 10 @Override 11 public Hero clone(){ 12 Hero h = ( Hero ) super.clone(); 13 h.money = this.money; 14 return h; 15 } 16 17}
java
1package cleric; 2class Monster implements KoMonster, Cloneable{ 3 String name; 4 int hp; 5 6 public void run(){ 7 System.out.println( "走って逃げた!" ); 8 } 9 10 @Override 11 public Monster clone(){ 12 Monster m = new Monster(); 13 m.name = this.name; 14 m.hp = this.hp; 15 return m; 16 } 17} 18
java
1package cleric; 2 3public class Sword implements Cloneable{ 4 int damage; 5 6 @Override 7 public Sword clone(){ 8 Sword s = new Sword(); 9 s.damage = this.damage; 10 return s; 11 } 12}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2016/07/09 07:27
2016/07/09 07:29