- 締切済み
RPGの主人公、町人、敵キャラのクラス関係
・町人は移動処理のみ ・主人公は移動処理とステータス ・敵キャラはステータス をもっているクラスとします。 この場合、どのように抽象クラスと継承を設計するべきでしょうか? 町人と主人公は共通の親、主人公と敵キャラは共通の親をもつべきかと思いますが 主人公が多重継承になってしまいます。 また、町人と主人公の親を作り、主人公から敵キャラへ継承すると 敵キャラに不要なメソッドを多く引き継がせることになってしまいます。
- みんなの回答 (4)
- 専門家の回答
関連するQ&A
- 親クラスのポインタ、クラスを指定しないポインタ
親クラス A (抽象メソッドX、Yの2つを持つ) と 子クラス B-1 (親はA、抽象メソッドX、Y、Zの3つを持つ) 子クラス B-2 (親はA、抽象メソッドX、Y、Wの3つを持つ) のように、子クラスでポリモーフィズムを実現しているとき、 クラスC 「実行時に、iniファイルに(1)と書かれていたら、B-1のクラスで実体化し、 iniファイルに(2)と書かれていたら、B-2のクラスで実体化する」 というクラスを作りたいです。 //////////////////////////////////////////////////////////////// 質問(1) その際、クラスCは、どうやってもZのメソッドや、Wのメソッドは書けない認識です。 (メソッド名もiniファイルから取るようにすれば別でしょうが。) この認識であっていますでしょうか? 質問(2) 逆に、XとYについては、それぞれ挙動の違う処理を行わせることができる認識です。 (クラスCで、親クラスAのポインタ型の変数を用意しておき、 そのポインタに、DLLのインスタンス化したものをいれておけば、 メソッドXとYについては実行可能という認識です)
- ベストアンサー
- C・C++・C#
- ~クラスのメソッドと言った場合継承したものを含むか
お世話になります。 OJC-Pの勉強中、以下の模試問題が出題されました。 ------------------- Threadクラスのメソッドとして正しいものを全て選びなさい wait() notify() run() start() ------------------- 解答はrun()、start()の2つだったのですが、 この場合、Objectクラスから継承したメソッドは Threadクラスのメソッドとは言わないのかを疑問に感じました。 (外部クラスから見た場合、 継承したメソッドもThreadクラスで新しく定義されたメソッドも区別は ないのでは、と考えたためです。) 問題文の表現に不備があるのでしょうか、 それともやはり 「~クラスのメソッド」と言った場合、継承したものは含まないとするのが 一般的な解釈なのでしょうか。 また、後者の場合、それはどうしてなのか理由なども添えていただけると 嬉しいです。 よろしくおねがいいたします。
- ベストアンサー
- Java
- 【C#】内部だけで有効なインターフェースを作りたい
C#2005でコンポーネントを作ろうと思っています。 そこであらゆるコンポーネントに共通な内部インターフェースが存在し、 更にはコンポーネントはいくつかの種類のコンポーネントを継承したいです。 不可能なコードで記すと、このようなことがしたいです。 【拡張TextBox】 public class ExTextBox : AbstractTextBox { } 【抽象TextBox】 public abstract class AbstractTextBox : TextBox, ICommonControl { public AbstractTextBox() { _ifMethod(); } private void _ifMethod() { ←これ // 処理 } } 【内部インターフェース】 public interface ICommonControl { void _ifMethod(); } インターフェースはpublic宣言以外定義が行えず、内部で利用される インターフェースとしては使えません。 別にインターフェースをそのまま実装すれば出来なくはないですが、 外部にインターフェースを実装したメソッドが見えるのはマズいです。 もしくは多重継承的なことが出来れば解決すると思うのですが・・・。 コンポーネントを継承する関係で、直前のクラスはTextBoxやLabelなどと いったクラスを継承するしかない為、それ以外の内部部分を共通化 したい場合に、どうすればいいのか分かりません。 実現させる方法が思いつかない為、何かシンプルな一例をご提示 頂けないでしょうか?
- ベストアンサー
- C・C++・C#
- eclipseでabstractクラスをデバックするには
いつもお世話になっております。 java1.6 eclipse3.3 にてabstractクラスのメソッドを呼び出している手前でブレークポイントを設定し、ステップインしてデバックしていくと、 abstractクラスの方のソースがデバックされます。 abstractクラスを継承している実際に流れているソースをデバックする事はできますでしょうか。 今はソースを追う時、abstractメソッドがきた場合、 そのメソッド名でプロジェクト全体を検索して、どのソースが実行されているのかチェックしていますが、たくさんのソースから継承されている場合、現在流れている処理が、どのソースのロジックかを特定するのが大変です。 簡単に特定する事はできますでしょうか。 よろしくお願いします。
- 締切済み
- Java
- クラスの分割
画像処理のプログラムを書いているのですが、1つのクラスに必要な変数と関数をぶち込んだため、変数20~、関数20~、2000行くらいのクラスになっています。 このままでは見辛いので、クラスを処理ごとに分割して見易くしたいのですが、各関数でいくつか共通の変数を使用しているため上手く分割ができなくて困っています。 データのみのクラスを継承した子クラスを3つ作ってみたらインスタンスが3つできてしまい意味がありませんでした。 ↓の図に示すようなクラスを作りたいのですが、いくつか質問をさせてください 共通データクラス / | \ 子クラスA 子クラスB 子クラスC 1、変数20~、関数20~、2000行くらいのクラスは普通でしょうか?(分割する必要がありますか?) 2、↑の図はクラスの作り方として問題がありますか? 3、2で問題がない場合実現する方法として、仮想継承、関数に共通データのポインタを渡す以外に方法があるかどうか まだまだC++を勉強中で、便利な構造体程度にしか使えていませんが、どなたかご教授お願いします。
- ベストアンサー
- C・C++・C#
- JAVA:抽象クラスとインタフェースクラスの違い
インタフェースクラスの存在意義がわかりません。 「処理の実体まで実装せず、箱だけ作っておく」という意味では、抽象クラスで良いのでは?と感じます。 (厳密には、インタフェースクラスの方は、継承せずに、複数の実装パターンを分けれるという部分に違いはあると思いますが、ほぼ存在意義がないように感じます。)
- ベストアンサー
- Java
- 【ASP.NET MVC3】共通ビュークラス
いつも大変にお世話になっています。 ASP.NET MVC3で作成しているシステムで、すべてのビューに、共通のプロパティを用意したいと考えております。 以前のASP.NETでは、System.Web.UI.Page を継承したカスタムクラスを継承していました。 public MyCustomPage : System.Web.UI.Page { // 共通のプロパティやメソッド } public class Index : MyCustomPage { public page_load(Object o, EventArgs e){ // ページロード処理 } }; このような継承定義をビューのクラスで行いたく思います。 MVC3のビューで、たとえば、MyViewModelというビューモデルを埋め込んだ、以下のようなクラスは、どのやって定義したら良いのでしょう? @inherits MyCustomView<MyViewModel> 土曜の夜だというのに、まだ帰れません(泣 何とぞよろしくお願い致します。
- ベストアンサー
- Microsoft ASP
- AWT Frameを利用するプログラムのmainメソッドを含むクラスについて
AWTのFrameを継承してWindowプログラムを作成する際に、どんな書籍のサンプルプログラムを見ても、メインクラスがFrameを継承し、その中にmainメソッドが有って、そのmainメソッド内で自分自身のクラスのインスタンスを作成してshowする、といった事を定石のように行っています。 しかし私が思うに、mainメソッドなど含まずFrameを継承してWindow周りの処理を純粋に行うクラスを作成し、プログラムのメインとなるクラス内のmainメソッドからFrameを継承した別クラスのインスタンスを作成・showする方が、よほどスッキリして理解し易いような気がするのですが、どうなんでしょ? そういったサンプルプログラムを作成してみましたが問題なく動作します。ただそういう事をやっている他のサンプルソースが見当たらないので、何となく不安です(笑)
- ベストアンサー
- Java
- 親クラスコンストラクタを呼び出すタイミングについて
・親クラスコンストラクタを呼び出すタイミングに決まりはあるのでしょうか? ・例えば、子クラスのコンストラクタではなくて、子クラスのメソッドとかで呼び出しても良いのでしょうか? ・後、親クラスコンストラクタ処理が不要な場合は、子クラスから呼ばなくても別に構わないのでしょうか?
- ベストアンサー
- PHP
- インターフェイスと抽象クラス
なかなか理解が難しくて苦しんでいます。 で自分なりに理解したのですが、 抽象クラス→内容に決まっているメソッドと決まっていないメソッドがある場合に決まっていないメソッドを あとからオーバーライドするだけでスーパークラスで定義したすべてのメソッドを利用できる。 これでただしいでしょうか? で、インターフェイスなのですが、この抽象クラスとそっくりなんですが、 (1)変数は定数になる(強制static)(2)メソッドは名前のみの宣言(内容は記述できない) と言うことで、かなり???なのです。 何のために・・・???記述するんでしょうか?? ただひとつメリットがあるとしたら、インターフェイスを実装すると、インターフェイスの配列でインスタンスを 生成出来るということぐらいでしょうか。 そこでちょっとお門違いの疑問かもしれないんですが、 Runnable、やMouselistenerはメソッドの内容が書かれていないのに、 なぜ機能を持たせることが出来るのでしょう??? 認識違い、間違い等ありましたら、教えてください よろしくお願いいたします。
- ベストアンサー
- Java
お礼
やはり機能の追加はインターフェースなのですね。 >Movable(移動インタフェース)、Attackable(攻撃インタフェース) 私もこのように実装してみようと思います。 すべてBaseEnityを継承といっても、さらにその下に複数の親がいるのだと思いますが 以下のようなイメージで合っていますか? BaseEntity | |-BattleChara-|-Friend (Movable, Attackable) | |-Enemy (Attackable) |-NonPlayerv(Movable) | |-OtherObject