2012-03-14 23 views
1

私はAndroid用サッカーゲームを作っています。スーパークラスへのアクセスを持つサブクラスでの呼び出しメソッド

私はクラスPlayerを持っています。 PlayerはDefencivePlayerとOffensivePlayerによって拡張されています。これらのクラスのそれぞれは実装されたタッチイベントを持ち、それらはすべてユニークです。私は別のクラス、ムーバーを持っています。ムーバーはPlayerにアクセスできるタッチを処理します。

FootballGameUML

(以下見られるように)プレイヤーは常にDefencivePlayerかOffensivePlayerのいずれかです。 Player.touchを呼び出すだけでタッチを処理できるようにする機能が欲しく、それに応じてDefencivePlayerまたはOffensivePlayerでそれぞれのタッチメソッドが呼び出されます。

私は、2つのクラスを持つという設計は、サブクラスがあることを保証していないので間違っていると思います。

私は本当にここで良いデザインを手に入れようとしていますし、何かをハックしたくありません。

+0

私が持っていた問題は、躊躇でした。私が望む機能は、テストすればプログラムがどのように動作するのかということでした。私は、サブクラスのメソッドが存在する必要がないので無視すると仮定しました。すべての非常に迅速な返答をありがとう – ChickenKitty

答えて

2

クラス図を使用して、3つのプレーヤークラスを設定し、一般的なArrayList<Player>の攻撃側プレーヤーと守備側プレーヤーのリストを作成しました。このコードの結果をプリントアウト:

players.add(new OffensivePlayer()); 
players.add(new DefensivePlayer()); 
players.add(new OffensivePlayer()); 
players.add(new OffensivePlayer()); 
players.add(new DefensivePlayer()); 

for(Player p: players) 
    p.touch(); 

が私にこの出力ました:

Touched offensive player. 
Touched defensive player. 
Touched offensive player. 
Touched offensive player. 
Touched defensive player. 

言い換えると、プレイヤーのさまざまな種類がPlayerのインスタンスとしてだけではなく、サブクラスとして解釈されました。

設計の観点から、それはこのように何も平野Playerオブジェクトが作成されていないことを保証するPlayer抽象クラスを作る価値があるかもしれないが、これtouch()方法はPlayerのサブクラスのインスタンスから実行されます。

0

あなたの質問を正しく理解しているかどうかはわかりませんが、現在の設定に問題はないようです。 Touch()方法はabstractあるよう

は限り(Playerabstract class Playerとして宣言することにする)、またはプレーヤーがinterface Playerとして定義されている、あなたはplayer.Touch()を使用して実装メソッドが呼び出されることを保証することができるようになります。

0

Player.Touch()abstractとすることができます。これにより、サブクラスが独自の実装を提供するようになります。

関連する問題