• 締切済み

オブジェクトの関連について

クラスAAAとクラスBBBをインスタンス化し、それぞれ、aとbのオブジェクトとします。 mainメソッドから、bのbmethメソッドを呼び出し、さらに、Amethメソッドを呼び出し また、mainからもaのAmethメソッドを呼び出し可能にする方法はありませんでしょうか? まだ、Java初心者なもので説明も不十分かと思いますがよろしくお願いします。 class AAA{ void Ameth() { System.out.println("Aメソッド"); } } class BBB{ public AAA a; void bmeth(){ a.Ameth(); } } public class test{ public static void main(String arg[]) { AAA a = new AAA(); BBB b = new BBB(); b.bmeth(); a.Ameth(); } }

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

みんなの回答

  • sh_hirose
  • ベストアンサー率66% (56/84)
回答No.1

これでいいのかな? class AAA{ void Ameth() { System.out.println("Aメソッド"); } } class BBB{ public AAA a; /** * コンストラクタ */ public BBB(AAA a) { this.a = a; } void bmeth(){ System.out.println("bmethメソッド開始"); a.Ameth(); System.out.println("bmethメソッド終了"); } } public class test{ public static void main(String arg[]) { AAA a = new AAA(); BBB b = new BBB(a); // AAAクラスのインスタンスを渡す b.bmeth(); a.Ameth(); } } 実行結果は bmethメソッド開始 Aメソッド bmethメソッド終了 Aメソッド になります。 処理順はこれでいいのかな? もし違うなら想定している実行結果を載せてみるのもいいかも。

関連するQ&A

  • 動的に変数をセット後他クラスから参照する場合

    コンストラクタで変数にセットした後 他のクラスでインスタンスを生成することなく セットした変数を参照したいのですが、 staticにすると、他クラスで変数を変更することも できてしまいます。他の方法がありますでしょうか? 変数はprivateにして、getterで取得するという方法も 考えられますが、static finalな変数として扱う方法が あるか、お分かりの方いらっしゃいましたら教えてください。 Javaを初めて1ヶ月なので、見当違いの質問でしたらご指摘ください。 例) Class A{  static final String aaa; A(String paraStr){ aaa = paraStr; } } Class B{ static void main(String[] args){ new A("test"); } } Class C{ void chStr(){ System.out.println(A.aaa); A.aaa = "changeStr" System.out.println(A.aaa); } } 期待する値 test test もしくは、実行時にfinalの値は変更できない等のException 宜しくお願いします。

    • ベストアンサー
    • Java
  • javaの基本的な質問です

    以下ソースコード(ただし、testtest クラスはどちらかを採用) public interface taberu { int doit (); } class taberu1 implements taberu{ @Override public int doit () { return 1; } } public class taberu2 implements taberu{ @Override public int doit(){ return 2; } } public class testtest{ public static void main(String[] args){ taberu1 a = new taberu1(); taberu2 b = new taberu2(); int aaa = a.doit(); int bbb = b.doit(); System.out.println(aaa + " and " + bbb); } } public class testtest{ public static void main(String[] args){ taberu a = new taberu1(); //ここが違う taberu b = new taberu2(); //ここが違う int aaa = a.doit(); int bbb = b.doit(); System.out.println(aaa + " and " + bbb); } } 出力結果 1 and 2 質問は testtest クラスの //ここが違う と書かれているところです 出力結果はどちらも同じなのですが、その違いにより何が違うのか教えてほしいです。それと、抽象クラスにおける場合でもどのような違いがあるのか教えてほしいです>< インターフェースは振る舞いを記述すべきなので抽象クラスを使えと怒られそうなんですが簡単にしたかったのでこうしました。 本を読んでもあまりしっくりと理解できなかったので質問します。 基本的なことを質問してしまいすみません。

    • ベストアンサー
    • Java
  • 現在のクラスを生成したクラスに渡したい

    親クラスで生成した子クラス(ダイアログ)から親クラス(ダイアログ)の関数などを使えるようにしたいと思っております。 ちなみに継承クラスで親クラスの関数を使うのではなく、親クラスそのもの(ダイアログ表示)を子クラスから変更できるようにしたいです。 (簡単になりますが…)プログラムの構成は以下のようになっており、thisポインタを渡すか所でエラーが起こってしまいます。 ------------------------------------------------ class AAA { BBB *b; void classBBB{ b = new BBB(this); // こういうことがしたいが、できない void fun( int a ); // ダイアログの表示が変更する(予定) }; class BBB { AAA *a; BBB(AAA *pDlg){ a==pDlg; } void fun(){ int b; a->fun(b); } // 親クラスの関数を呼び出したい }; ------------------------------------------------ ただし、class Aとclass Bを生成する上位階層のプログラム構築をすることはなしとします。 ------------------------------------------------ こんな感じ AAA *a = new AAA(); BBB *b = new BBB(a); ------------------------------------------------ どうしてもclass AAAからclass BBB呼び出したいと思ってます。 何か良い解決法があれば、教えていただきたいです。 宜しくお願い致します。

  • C#でクラス継承について

    下記のようなコードは、可能なのでしょうか? // クラス定義 abstract class Base { int a; Public int A { get{ return a; } } } class Sub1 : Base { int b; public int B { set { b = value; } } }; class Sub2 : Base { // 中略 } static class Program { [STAThread] static void Main(string [] args) { Base aaa = new Sub1(); Base bbb = new Sub2(); func(aaa); // ここでCS1502, CS1503 func(bbb); // ここでCS1502, CS1503 } void func(Sub1 _aaa) { // 中略 } void func(Sub2 _bbb) { // 中略 } } コメントに書いたとおり、CS1502(引数が合わない)が出ます。 func((Sub1)aaa); の様にキャストしないと、動作させることは難しいでしょうか? ※ 実際のコードでは、func(aaa), func(bbb)の呼び出し部分をループでまわしたいと考えています。

  • mainクラス内に書いたメソッドの宣言の仕方(staticの必要性)

    java を勉強中の超初心者です、宜しくお願いします。 main と同じクラスに disp というメソッドを作成してやり、” void disp(int a , int b )”と書いてやりましたが、mainからアクセス出来ません。 そこで、” static void disp(int a , int b )” という風に” static ” を先頭につけてやりましたら、うまく動きました。 これは、mainメソッドから他のメソッドにアクセスする場合には、必ず” static ” をつけてやる必要があるということでしょうか。 ======================================================= class クラス練習 { public static void main(String[] args) { disp(5,10); } /*static*/ void disp(int a , int b ) { System.out.println("a+b = " + (a+b)); } }

    • ベストアンサー
    • Java
  • C++ オブジェクトポインタのメリット

    以下の例のように、あるオブジェクトが別のオブジェクトのメンバ関数にアクセスする時、ポインタを使うメリットはあるのでしょうか? ご助言いただきたいです。 よろしくお願いします。 ↓例 オブジェクトAのaaa関数からオブジェクトBのbbb関数にアクセスしてHello!を表示する。 #include <stdio.h> class B { public: void bbb(void); }; class A { public: void SetBObj(B* objB); void aaa(void); private: B* mem_objB; }; int main(void) { A* objA = new A(); B* objB = new B(); objA->SetBObj(objB); objA->aaa(); delete new A(); delete new B(); return 0; } void A::SetBObj(B* objB) { mem_objB = objB; } void A::aaa(void) { mem_objB->bbb(); } void B::bbb(void) { printf("Hello!\n"); }

  • (クラス名.this.メソッド)って・・・?

    次のようなクラスで public class ClassA {   public static void main(String[]args)   {     new ClassA(); /* 構築A */   }   public ClassA()   {     new ClassI();   }   public class ClassI()   {     ClassA.this.MethodA(); /* 命令A */   }   public void MethodA()   {     System.out.println("HELLO");   } } この命令Aの部分の (クラス名.this.メソッド)というアクセス方法がよくわかりません とりあえす(ClassA.this)が構築Aの部分で生成された インスタンスではないかとおもうのですがそれで正しいのでしょうか? また インナークラスはインナークラスの定義されているクラス以外から インスタンスを生成できないのでしょうか? つまり次のクラスを追加して public class ClassB {   public ClassB()   {     new ClassA.ClassI(); /* 構築B */   } } ここの構築Bのように(この場合はダメの様ですが)他のクラスから 構築することです もし仮にできるとしたら そのときの命令Aの(ClassA.this)は一体なんの インスタンスを指すのでしょうか 急ぎのプログラムを作っているので たいへん不躾ですが、なるべく早くお答えをお願いします

    • ベストアンサー
    • Java
  • 「自作クラスの型」にキャストする方法について。

    「自作クラスの型」にキャストする方法について。 Java初心者ですが、よろしくお願いします。 class AAA class BBB ※クラスAAAはクラスBBBのスーパークラス(直属のスーパークラスとは限らない)とします。 class CCC という3つのクラスがあるとして、 この場合、 class CCC{ AAA var; BBB bbb; void test(){ bbb = new BBB(); var = (AAA)bbb; //---★ } } というような、キャストは可能ですよね?(←確認1) 次に(確認1に問題が無い場合)、 クラスAAAとクラスBBBの格納場所(パッケージ関連の話です)について、 AAAとBBBがどういう位置関係にあるときに、上記のキャストは可能になるのでしょうか? AAAとBBBが同一パッケージ内にある時だけでしょうか?(←確認2[質問の核]) で、さらに、 上記の「---★」の所で、 AAAクラスにキャストする処理をしていますが、 この時、AAAクラスのコンストラクタは呼ばれるのでしょうか? (AAAをnewしていないけれど、キャスト処理でnewしたのと同じことになったりしますか?) また、これと同様の質問になりますが、 仮に、クラスAAAの設計が、クラスAAAのインスタンスが生成された場合に、 何らかのコールバック処理が行われるような設計の場合、 この (AAA)bbb というキャストによって、想定しているコールバック処理 は行われたりしますでしょうか?(←確認3) 初心者らしからぬ質問かもしれませんが、 どなたか、どうか分かりやすく教えて下さい。

    • ベストアンサー
    • Java
  • メソッドのオーバーライド(java)

    class A3{ void hello(){ System.out.println("A3"); } void hello(int i){ System.out.println("A3"+i); } } class B3 extends A3{ void hello(){ System.out.println("B3"); } } class C3 extends B3{ void hello(String s){ System.out.println("C3"+s); } } class MethodOverriding3{ public static void main(String args[]){ A3 obj = new C3(); obj.hello(); } } 上のプログラムを実行すると"B3"と表示されまが、どうしてクラスBのメソッドが実行されるのでしょうか? クラスAのメソッドが無視される仕組みがわかりません。 また、クラスMethodOverriding3でobj.hello("abc")としてコンパイルすると mo.java:25: シンボルを見つけられません。 シンボル: メソッド hello(java.lang.String) 場所 : A3 の クラス obj.hello("abc");   ^ エラー 1 個 とエラーが出ます。 どうしてでしょうか? 誰か教えてください、お願いします。

    • ベストアンサー
    • Java
  • javaの質問です。

    明日JavaのBronze試験を受けに行くのですが、全然わからずに困っています。 紫色のJavaプログラマBronzr[SE7]という本を使用しています。 本の模試の問題です。 37 Class Super{ static void method(){ System.out.println("Super"); } } Class Sub extends Super{ static void method(){ System.out.println("Sub"); } } Class Test { public static void main(String[] args){ Super obj = new Sub(); obj.method(); } } この問題はSuperが表示されるらしいのですが、理由がわかりません。 サブクラスをインスタンス化しているので、Subが表示されるというのなら理解できます。staticが関係あるのはなんとなくわかるのですが、、、、、、なぜSuperなのかがわかりません。 解答ではスーパークラスの型にサブクラスを入れているからと簡単に書いてあります。 詳しく説明していただけると助かります。

    • ベストアンサー
    • Java

専門家に質問してみよう