現在swingでインベーダーゲームを作っています。
java
1public abstract class Shot { 2 protected static int x; 3 protected static int y; 4 // 弾の画像 5 protected Image image; 6 7 8 public void draw(Graphics g){ 9 g.drawImage(image, x, y, null); 10 } 11 //その他メソッド,フィールド等省略してます 12} 13↓継承 14public class PlayerShot extends Shot { 15 //省略 16} 17public class EnemyShot extends Shot { 18 //省略 19} 20 21 22↓パネルでの描画メソッド 23public void draw (Shot shot,Graphics g) { 24 shot.draw(g); 25}
上記のような作りになっています。
最初Shotは抽象クラスではない普通のクラスだったのですが、メソッドの型としか使わないのにインスタンス化できるのはどうかと思い、インスタンス化を防ぐためだけにabstractをつけました。(抽象メソッドがない)
ただ、そのためだけにabstractをつけるのはイケてないなと感じ、他にやり方を調べると、privateコンストラクタでインスタンス化を防ぐ方法等が見つかりましたが、これだと継承先でもインスタンス化ができなくなるので、結局abstractをつけたままにしています。
そこでお聞きしたいのは
インスタンス化を防ぐためだけに抽象クラスにするのはやめたほうがいいのか?
他に回避方法があるのか?
まずこういう風になる設計がおかしいのか?
等です。
以上、よろしくお願いします
回答3件
あなたの回答
tips
プレビュー