私は "モール"についてシミュレーションをしています。私は同じ人物の性格に対応する同じレベルのクラスをたくさん持っています。 たとえば、私は同じレベルのクラス、クラウン、泥棒、暗殺者、物質師などを持っています そしてClientsという父のクラス。クライアントクラスでは、私は食べたり、歩いたりするためのいくつかのメソッドを持っています。それぞれの特定のクラスには特定のメソッドがあり、泥棒は盗んだり、暗殺者を殺したりします。 私はどのようにすべての "クライアント"特定の方法ごとにキャストしますか?クラスのやりとり
Q
クラスのやりとり
0
A
答えて
0
おそらくあなたは、このような何かを行う必要があります。一般的に、この問題の解決策は、usrが応答したときにダウンキャストすることです。
0
これにはランタイムキャストが必要です。一覧にはList<Client>
と入力し、リストにアクセスするときにキャストを実行できます。しかしながら、これは特に頑丈な設計ではない。私はあなたのクライアントが実行時にキャストする必要がある十分に異なる場合、なぜあなたが継承を全く使用しているのか疑問に思います。しかし、一部の限られた状況で
public abstract class Client
{
public void Eat() { /* some implementation */ }
public void Walk() { /* some implementation */ }
public abstract void TypeSpecificAction();
}
public class Thief
{
public overeride void TypeSpecificAction() { Steal(); }
public void Steal() { /* some implementation */ }
}
public class Assassin
{
public overeride void TypeSpecificAction() { Assassinate(); }
public void Assassinate() { /* some implementation */ }
}
これだけ作品:
関連する問題
- 1. JVMへのクラスの注入と既存のクラスとのやりとり
- 2. PHPのスコープとクラスのインスタンスのやりとり
- 3. Java異なるクラスのオブジェクトとのやりとり
- 4. 外部クラスとのやりとり方法
- 5. 部分クラスよりもタブ項目とのやりとりの方が良い
- 6. iPodのやりとり
- 7. アンドロイドアプリケーションのやりとり
- 8. Androidサービスのやりとり
- 9. UIViewアニメーションのやりとり
- 10. Codeigniterモジュールのやりとり
- 11. Androidウェブのやりとり
- 12. MKMapView didDelectlectAnnotationViewとUITableViewとのやりとり
- 13. Androidアプリとフィットネスバンドとのやりとり
- 14. pyncとtweepyとのやりとり
- 15. gitクライアントとローカルファイルシステムとのやりとり
- 16. zf2 LoginServiceInterfaceとモデルとのやりとり
- 17. データベースとやりとりするクラスのテストカバー率を上げるには?
- 18. ios-chartsとのユーザーのやりとり
- 19. C#のWebページとのやりとり
- 20. 2つのループとのやりとり
- 21. 別々のフレームとのやりとり
- 22. Azureコンテナインスタンスのコンテナとのやりとり
- 23. RubyのYahoo Placemakerとのやりとり
- 24. WPFのModelVisual3Dオブジェクトとのやりとり
- 25. d3js v4のツールチップとのやりとり
- 26. JavaScriptとのAndroidデータオブジェクトのやりとり
- 27. woocommerceのカスタムウェアハウスAPIとのやりとり
- 28. Pythonの__hash__と__eq__のやりとり
- 29. 別のクラスのクラスのすべてのインスタンスとのやりとりはどうしますか?
- 30. UITextField(Swift)とのやりとり方法
私はすべてのクライアントをクライアントリストに入れようとしていましたが、うまくいかないため、すべての特定の方法を使用できます。 – waclock
これは、たとえば、 "SpecialAction"というクライアントインターフェイスでより一般的な呼び出しにすることができます。 –
Uは間違いなくインターフェイスでなければなりません。例えば、IPeopleやIArchetypeのようなものをインタフェースIMovementProviderなどからいくつかのメソッドで使用します。 –