• ベストアンサー

オブジェクトの呼び方

こんばんわ。 初歩的な質問になるんですが、 もしクラスA・B・Cがあったとして AでCのオブジェクトを作ったとします。 そのオブジェクトをBで呼ぶにはどうすればいいのでしょうか。 変数ではなくオブジェクトなので今まではそのまま呼び出せると思ってましたがそのままでは呼び出せませんでした。 やはりクラスが違うと何か必要なのでしょうか。 よろしくお願いします。

  • Java
  • 回答数4
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • MrBan
  • ベストアンサー率53% (331/615)
回答No.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)
回答No.3

 # (Cでなく)C++なら<cstdio>が…云々は本題ではないので捨て置いて。 情報不足なのですが、普通に呼べそうに思いますけど。 どんなコードが書きたいのでしょうか? 「呼べませんでした」とは具体的にどんなエラーですか? ・単純にアクセスできてないだけか、 ・クラスインスタンスと混同しているか、 あたりが怪しいと思うのですが、 ・どんなファイル構成(A,B,Cは別javaファイルですか?など)で、 ・どんな感じのコードを書きましたか?

ainobakuda
質問者

補足

確かにインスタンスでした。。まだ違いがはっきりしていないもので・・。 3つとも別javaファイルです。 エラーは『シンボルを見つけられません。』 と出ます。 Aがメインです。 AはBのインスタンスを画面を描写する場所に指定し、 Bには画像を描写するメソッドやらがあります。 Cはスレッドでrunメソッドの中にBで書く画像の位置をずらして、再描画したいのですがここがうまくいきません。ここでAで作ったインスタンスを使いたいのです。 わかりにくい文になってしまいましたがよろしくお願いします。

回答No.2

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

ainobakuda
質問者

補足

回答ありがとうございます。 確かにこれなら同じメソッドが呼べそうですが、 自分が間違っていました。 本当は同じインスタンスのメソッドを呼ぶということでした。 回答してもらったのに申し訳ないです・・。

回答No.1

まず、"オブジェクト"は呼べないのでは? オブジェクトのメソッドを呼び出すと解釈すると以下のように。 #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; }

ainobakuda
質問者

お礼

早速回答ありがとうございます。 そういや、そうでした。 同じオブジェクトのメソッドを呼ぶということでした。 もしクラスDから呼ぶとなるとまたAのオブジェクトを作らないといけないんですかね・・・。 よくわかりませんが自分はJAVAをやってるんですがこれはCかなんかじゃないんですかね・・。それともJAVAでもこういう書き方できるんですかね。

関連するQ&A

  • オブジェクト指向で分からないことが。

    オブジェクト指向で分からないことが。 1.クラスAから、文字列引数を指定して、クラスBがインスタンス化されたオブジェクトを取得する。 (getInstance的メソッド)引数の文字列にマッピングされたオブジェクトを取得する感じ。 2.1.で取得したオブジェクトから、各オブジェクトを取得するメソッドを呼び出し、オブジェクトを取得する。(仮にクラスC) 3.2.で取得したクラスCのメソッドを呼び出す。 このとき、クラスCのメソッド内で、1.で利用された引数を利用したいです。 そもそもクラスCは、1.を経てしか取得されないものの為、再度1.の引数を渡したくありません。 内部的な値なので、スコープpublicのセッターを用意して、クラスA内からの書き換えが出来ては困ります。 こういう場合、どういうクラス設計を行えば良いのでしょうか?

    • ベストアンサー
    • Java
  • javaのarraylistについて

    あるクラスでArrayListを使って オブジェクト変数を保存したんですけど その保存したオブジェクト変数をほかのクラスで使用するにはどうしたらいいでしょうか? 例えば クラスAでクラスBのオブジェクトを作成し そのオブジェクト変数をArrayListに保存しました クラスCでArrayListに保存したオブジェクト変数を呼び出したいです 初心者なので何を言ってるのかわからないかもしれないですけど よろしくお願いします

  • C#でオブジェクトが生成されるたびに加算される変数

    タイトルの通りなのですがどうも上手く行かなくて・・・ まず、これが今作ってる、立方体の定義のためのクラスです class cube { public point a = new point(); public point b = new point(); public point c = new point(); public point d = new point(); public point A = new point(); public point B = new point(); public point C = new point(); public point D = new point(); } (point は x,y,zの値を持つ別のクラスです) ここで、それぞれのpoint(頂点)を生成した分だけ、それぞれのオブジェクトに、その通し番号を持たせることは出来ないでしょうか、つまり、最終的にそれぞれのオブジェクトが それぞれのクラスのメンバ変数 ”通し番号” を定義したとして a.通し番号 が 1 b.通し番号 が 2 c. 通し番号 が 3 という感じになるようにしたいんですが出来ません・・・ 外部にstaticな変数をおいてどうにかしようと思いましたが、staticなので、最後の通し番号に上書きされてしまって個別のオブジェクト内に保持できません むしろstatic変数ののある時点での実態コピーが出来るならそれも教えて下さい、それでもこの問題は解決します よろしくお願いします

  • 生成されるStringオブジェクトは2つ3つ??

    http://www.okweb.ne.jp/kotaeru.php3?q=716958 以前質問した内容について、またわからなくなりました。 「STRINGオブジェクトはいくつ作成されますか? String a,b,c; a="1234"; b=a; c=a+b; 」 で、答えはA=B="1234"のひとつと c="12341234"のひとつで、計2つ、ということなんですが・・・ たとえばOkwebクラスがあったとして Okweb ok = new Okweb(); Okweb goo = ok; この場合には生成されるオブジェクトは1つというのはわかります。 gooにも参照が渡されたというだけで、あくまでもひとつということですよね。それは、okに変化があったとき同時にgooも変化することでわかります。 ここで例の問題に戻ります。 加えて b="5678"; として確認(println等で)してみますと、 a="1234",b="5678" となっています これは a=b=1234ではなくて a=1234 b=1234 というようにあくまでもaとbは違うStringオブジェクトであるということを示しているといえないのでしょうか? よろしくお願いします教えてください

    • ベストアンサー
    • Java
  • Objectクラスのオブジェクトををdoubleにしたいです。

    こんにちは。 今スタックを使ってプログラムを組んでいます。 Double型のオブジェクトをスタックに入れて、次に取り出したとき、double型の変数として扱いたいです。 スタックをpopすると、Objectクラスのオブジェクトとしてpopしてくれると思うのですが、そのオブジェクトをdouble型の変数に変換する方法がわかりませんでした。 ちなみにpushはうまくいっているようです。 誰かお分かりでしたら教えてください。よろしくお願いします。

    • ベストアンサー
    • Java
  • 戻り値がクラスオブジェクト

    VB初心者でわからないので教えてください。 ある関数を呼び出して戻り値を取得するのですが、その戻り値がクラスオブジェクトとなっています。いろいろ調べてみましたが、いい結果にヒットしなかったので今回質問してみました。 言語はVB6.0です Function 関数A(A as String, B as String) dim C as Class1 set C = new Class1 Class1で宣言された変数に値を入れる処理     関数A = C end Function イメージはこんな感じです。 すみませんが解決策を教えてください。。。。

  • オブジェクトを格納するためのローカル変数のデータ型について

    ずっとCOBOLユーザで、初めてJAVAを勉強しています。 初歩的なところで、早くも躓いています・・・。 オブジェクトを格納する為のローカル変数の「データ型」について、 私が使用している本に「格納するオブジェクトのクラスがデータ型と なります。」と書かれていますが、ピンと来ません。 クラス名がデータ型になるって、どういうことなんでしょう? どなたか、こんな私に判るように説明していただけませんか? よろしくお願いします。

    • ベストアンサー
    • Java
  • ローカル変数の使いかた

    非常に初歩的なのですがrubyにおいてインスタンス変数、ローカル変数とクラス変数の使い分けがわかりません。 あるクラス内においてクラスから作られたすべてのオブジェクトに適用したい値はクラス変数に、インスタンスごとに違うのならインスタンス変数にするのはわかるのですが、クラス内でローカル変数はなぜ使うのでしょうか?受け取った引数もオブジェクトならインスタンス変数に、クラスならクラス変数に原理的には属すと思うのです。 あるオブジェクトがあるメゾッドを実行した時にそのオブジェクト全体に適用したくない変数をローカル変数にすると考えました。 その場合、なぜ class A a= 1 end のようにメゾッドに属さないクラス内にあるローカル変数があるのでしょうか?

  • オブジェクト変数にInteriorオブジェクトなどは代入できますか?

    オブジェクト変数にInteriorオブジェクトやBordersオブジェクトを代入することってできますでしょうか? 例えば変数"HT"にInteriorオブジェクトを代入して、 Range("C3").HT.colerindex=7 という設定はできるのでしょうか?

  • stringオブジェクト

    あるテキストの問題に 「STRINGオブジェクトはいくつ作成されますか? String a,b,c; a="1234"; b=a; c=a+b; 」 というのがあったんですが、答えは2個でaとb。 cはストリング文字列だから、という答えでした・・・ えーーー?!? とびっくりしてしまいました。 なぜなら、"1234"というのも文字列だと認識していたからです。 StringオブジェクトとString文字列の境目は何ですか?

    • ベストアンサー
    • Java

専門家に質問してみよう