- ベストアンサー
オブジェクトの呼び方
こんばんわ。 初歩的な質問になるんですが、 もしクラスA・B・Cがあったとして AでCのオブジェクトを作ったとします。 そのオブジェクトをBで呼ぶにはどうすればいいのでしょうか。 変数ではなくオブジェクトなので今まではそのまま呼び出せると思ってましたがそのままでは呼び出せませんでした。 やはりクラスが違うと何か必要なのでしょうか。 よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
> Aがメインです。 > AはBのインスタンスを画面を描写する場所に指定し、 > Bには画像を描写するメソッドやらがあります。 > Cはスレッドでrunメソッドの中にBで書く画像の位置をずらして、 > 再描画したいのですがここがうまくいきません。ここでAで作ったインスタンスを使いたいのです。 方法的には、 ・AのインスタンスをCと共有する(cからaを参照してbを得る) ・BのインスタンスをCと共有する(cからaと共有のbを見る) ・Aのクラスインスタンスにしておく(cからA.bを参照する) というあたりでしょうか。 # スレッドとのことなので、排他制御に気をつけてください。 シンボルが見つからないということは、 単に「そんなの見つからなかった」ということなので、 ファイルの配置か、クラスの宣言方法の問題で、 「BからはA(のなかのC)が見えない」という状況でしょう。 # どのシンボルが見つからなかったですか?A?C? なので、書いたコード(少なくともA,B,C,a,b,cの 生成/参照関係などが分かるもの)がないと具体的な指摘は できませんが、実現可否を問われれば、可でしょう。 > 変数ではなくオブジェクトなので、 「変数」と「オブジェクト」をどう使っていますか? ・intなどとOjbectなどのことを指していますか。 ・staticの有無を指していますか。 「変数」のときはできていたのですか? # C++とJavaは似て非なるもので別に上下関係ないです。主用途が違う。
その他の回答 (3)
- MrBan
- ベストアンサー率53% (331/615)
# (Cでなく)C++なら<cstdio>が…云々は本題ではないので捨て置いて。 情報不足なのですが、普通に呼べそうに思いますけど。 どんなコードが書きたいのでしょうか? 「呼べませんでした」とは具体的にどんなエラーですか? ・単純にアクセスできてないだけか、 ・クラスインスタンスと混同しているか、 あたりが怪しいと思うのですが、 ・どんなファイル構成(A,B,Cは別javaファイルですか?など)で、 ・どんな感じのコードを書きましたか?
- postal0x02
- ベストアンサー率42% (24/57)
JAVAプログラマでしたかw C++で書いてしまいましたよorz JAVA は C++ の上位互換なので、近い書き方ができるはずです。 A から B のメソッドを呼びたいならば、 「継承」させてはどうでしょう? class B { void show(void){ System.out.println("class B"); } } class A extends B { } class Sample { public static void main(String[] args) { A a = new A; a.show(); } } 生粋のC言語プログラマなので、↑があってるか分かりませんw
補足
回答ありがとうございます。 確かにこれなら同じメソッドが呼べそうですが、 自分が間違っていました。 本当は同じインスタンスのメソッドを呼ぶということでした。 回答してもらったのに申し訳ないです・・。
- postal0x02
- ベストアンサー率42% (24/57)
まず、"オブジェクト"は呼べないのでは? オブジェクトのメソッドを呼び出すと解釈すると以下のように。 #include <stdio.h> class B { public: void show(){ printf("class B\n"); } }; class A { public: B b; }; int main() { A o; o.b.show(); return 0; }
お礼
早速回答ありがとうございます。 そういや、そうでした。 同じオブジェクトのメソッドを呼ぶということでした。 もしクラスDから呼ぶとなるとまたAのオブジェクトを作らないといけないんですかね・・・。 よくわかりませんが自分はJAVAをやってるんですがこれはCかなんかじゃないんですかね・・。それともJAVAでもこういう書き方できるんですかね。
補足
確かにインスタンスでした。。まだ違いがはっきりしていないもので・・。 3つとも別javaファイルです。 エラーは『シンボルを見つけられません。』 と出ます。 Aがメインです。 AはBのインスタンスを画面を描写する場所に指定し、 Bには画像を描写するメソッドやらがあります。 Cはスレッドでrunメソッドの中にBで書く画像の位置をずらして、再描画したいのですがここがうまくいきません。ここでAで作ったインスタンスを使いたいのです。 わかりにくい文になってしまいましたがよろしくお願いします。