• ベストアンサー

外部クラスにアクセス

例えばAクラスで宣言した外部クラス、BクラスとCクラスがあったとします。 例えばそのBクラスから(Aクラスで宣言されて実行中の)Cクラスにアクセス する方法はないでしょうか? 内部クラスにはしたくありません。知っているという方は教えて下さい。もし なければないで結構ですので、それも教えて下さい。お願いします。

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

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

  • ベストアンサー
  • kuro_73
  • ベストアンサー率28% (33/117)
回答No.1

よくわかりませんが、 BクラスにCクラスの参照を渡せばよいのでは? たとえば、 C_cls c = new C_cls() B_cls b = new B_cls(c); c.setA("XXX"); C_cls cc = b.getC(); out.println(cc.getA()); としたら、"XXX" と返りませんか?

a_works
質問者

お礼

確かに、 class C_cls { String a,b; C_cls() {} void setA(String set) { a = set; } void setB(String set) { b = set; } String getA() { return a; } } class B_cls { C_cls cls2; B_cls(C_cls c) { c.b = "YYY"; cls2 = c; } C_cls getC() { return cls2; } } class A_cls { public static void main(String[] args) { C_cls c = new C_cls(); B_cls b = new B_cls(c); c.setA("XXX"); C_cls cc = b.getC(); System.out.println(cc.getA()); System.out.println(c.b); } } で参照できました。実はサウンドプレイヤー [ http://users.goo.ne.jp/a-works/ ] なのですが、例えば(上記の)BクラスでDクラスのインスタンス を作り、Cクラスでインスタンス化したEクラスのイベントから (Bクラスでインスタンス化した)Dクラスのメソッドを実行させる みたいな事をしたかったと言うことと、クラスの再利用性を上げる ため、内部クラスにはできるだけしたくなかったという事です。 …初歩が全く分かってなかったようですね。何とでもなりそうです。 わざわざ教えて頂き、ありがとうございました。

関連するQ&A

  • 内部クラスのインスタンスを外部クラスが保持する場合

    C++での内部クラスの宣言の仕方なのですが、例えば、 class Outer { private:    class Inner; public:    Outer();    ~Outer(); }; class Outer::Inner { public:    Inner();    ~Inner(); }; のように単純に内部クラスが宣言されているだけならば、 その具体的な定義を外側に書くことは可能と思うのですが、 class Outer { private:    class Inner    {    public:       Inner();       ~Inner();    }; public:    Outer();    ~Outer();    Inner inner; //内部クラスのインスタンス }; のように外部クラスが内部クラスのインスタンスを保持していた場合には、 上記のようにインスタンス作成より上で外部クラスの宣言内に内部クラスの定義を書かないと、 コンパイルが通らない(VC++2008)と思います。具体的な中身がないままインスタンスを 作っているのでエラーを吐く理由もわからないでもないですが、 見易さ的に上の例のようにかけないのかなとも思ったりします。 インスタンスを外部クラスに持たせずともどうとでもなるのですが、 あえて上のようなことをしたくなった場合には下のような方法で記述する以外ないのでしょうか?

  • 外部クラスから、JTextArea等のコンポーネントへのアクセス

    外部のクラスから、main()のあるクラスの JTextArea等のコンポーネントにアクセスし、 setText(),append()などで、表示を変えるには、 どうしたらいいのでしょうか。 現在は、Threadを承継したクラスから、呼び出し元 のクラスのJTextAreaにアクセスしたいのです。 もっとも、同じことは、イベントリスナクラスを、 内部クラスではなく、外部クラスとして、記載した 時にも生じてしまいます。 たとえば、そのコンポーネントだけ、staticにする ということも考えられますが、なにか記載がおかしい 気がします。 なにかアドバイスがありましたら、お願いします。

    • ベストアンサー
    • Java
  • VB6で外部から静的アクセスが可能な定数

    VB6で(正確にはExcelVBAですが)ちょっとプログラムを組んでいるのですが、 クラス内で、外部からアクセス可能な静的定数を宣言を行いたいのですが、 宣言方法が分からず止まってしまいました。 出来たかどうかも記憶にありません・・・。調べても分からず;; Static Const var As String = "hoge" みたいな事をしたいんですが、やり方が分かる方ご教示下さい。

  • 無名内部クラスと匿名内部クラスと匿名クラスの違い

    ■外部クラス ・外部クラスの定義を教えてください ・内部クラスに対して外部クラスと言うのであれば、「クラス内に宣言されたクラスがないクラス(普通のクラス?)」は外部クラスとは言わないのでしょうか? ■無名クラス ・無名クラスは必ず内部クラスなのでしょうか? ■同じ意味? 下記は同じ意味でしょうか? ・無名内部クラス ・匿名クラス ・無名クラス ・匿名内部クラス

    • ベストアンサー
    • Java
  • ACCESSでの外部結合について

    当方ACCESSの初心者です。 ACCESSで外部結合をしたいのですが、LEFT JOIN とRIGHT JOINの二種類しか 選択肢が有りません。左右両方の外部結合を行いたいのですが何か良い方法を ご存知の方がいらっしゃるようでしたら教えてください。 ほしい結果は以下の通りです。 テーブルA 製品1 在庫A 製品2 在庫B 製品3 在庫C テーブルB 製品2 売上X 製品3 売上Y 製品4 売上Z 結果 製品1 在庫A NULL 製品2 在庫B 売上X 製品3 在庫C 売上Y 製品4 NULL 売上Z

  • C++ クラスについて

    クラスについて今勉強しています。 そこで質問なんですが クラスの中にクラスというのは実現可能なのでしょうか? クラスAの中にクラスBとクラスCが入っている状態で、 クラスAの中にある関数XでクラスBやCの関数を呼ぶような処理を目指しています。 またクラスAに宣言されている変数をクラスB,Cの中で変更したりできないでしょうか?

  • C++でfriendクラスにしているのにprivateメンバにアクセスできない

    C++でメンバ変数をprivateにして、特定のクラスにだけ公開するようにクラスをfriend指定したのですがprivateメンバにアクセスできませんとエラーが吐かれてしまいます。 先行宣言したりもしてみたのですがどうしても使用できません。 何か心当たりのあるかた教えてください。 class A { friend class B; private: int a; }; class B { public: void test( A *a ) { a->a = 0; } }; コードは違いますがこんな感じのことをしたいのです。 /* コンソールで小さなプログラムでテストしてみると動くのにいざ実際のソースに組み込むと動かないという奇妙な状態です。よろしくお願いします。 */

  • 基本クラスと派生クラスの宣言順序

    C++のクラスの宣言は、基本クラスから先に宣言しないといけないのでしょうか。 例. 次の順で宣言するとエラーになる。 class A : public B { public: private: } calss B { public: private: }

  • Access2007 外部MDBコントロール

    Access2007 外部MDBコントロール 使用OS:xp Access:2007 いつもお世話になっております。 Access2007のVBA(GetObject)を利用して、外部MDBをコントロールしたいと考えております。 「実現したい内容」 3つのMDBが存在します。 A.mdb B.mdb C.mdb A.mdbにコードを書いて、B.mdbにC.mdb内のレポート「レイアウト」をインポートします。 ******************************************************************************************************* Dim ACC As Access.Application Set ACC = GetObject("B.mdbのフルpath") '外部MDBへ接続 DoCmd.SetWarnings False On Error Resume Next ACC.DoCmd.DeleteObject acReport, "レイアウト" 'レポートの削除 On Error GoTo 0 ACC.DoCmd.TransferDatabase acImport, "Microsoft Access", "C.mdbのフルpath", acReport, "レイアウト", "レイアウト", False ACC.CloseCurrentDatabase Set ACC = Nothing ******************************************************************************************************* 実行するとレポート「レイアウト」はB.mdbに格納(インポート)されるのですが、 その際、C.mdbが一旦起動し、データベースウインドウが開いて閉じる動作が走ってしまします。(当然だと思いますが) その動きを止める(裏でコードが走る状態)ことはできないでしょうか。 以前Access2000で同じコードを実行したときは画面の切り替えはなく、裏で実行されていました。 過去質問をうまく検索できずご質問させていただきます。 ご教授の程宜しくお願い申し上げます。

  • 内部クラスから別の内部クラスのインスタンスを取得するには

    早速ではございますが質問をさせていただきます。 以下のクラスで、 ////////////////////////////////////////////////// class A { class B {} class C {} } ////////////////////////////////////////////////// 内部クラスB内で内部クラスCのインスタンスを取得するに はどうすればよいのでしょうか?どうかご教授のほど よろしくお願いします。

    • ベストアンサー
    • Java