这个我想简单的可以这样吧:
  首先 构造一个A类实例
  A a = new A();
A类里面有一个设置引用B类的方法,比如setBref( B b ){}
然后再B类的构造函数里面把A的引用传递过去
  B b = new B( a );
然后把这个B类的引用传递给A
a.setBref( b );
这样a和b就都能看到对方了,那么你在任何一个里面都能调用对方的public
方法了这样如何?

解决方案 »

  1.   

    各写一个public的方法就是了。不是很明白你的困难在哪里。
      

  2.   

    可以用观察者模式。
    A类实现Observer接口,B类继承Observable类就行了。
    就象下面这样:A.java
    public class A {
      B b = null;
      public A(B b) {
         this.b = b;
         b.addObserver(this);
      }  public void update(Observable ob, Object obj) {
          b.method();//自动调用B要完成的动作
      }
    }
    B.java
    public class B extends Observable {
        public void action() {//B的动作
          .......
          notifyObservers();//通知A
        }
    }
      

  3.   

    楼上的理论说对了。但程序写错了。
    B做动作,应该是B监听A的行为。
    实现如下:
    package com.test.csdn.others.a;
    import com.test.csdn.others.b.B;
    public class A extends java.util.Observable
    {
        public A()
        {
        }
        public void sendMsg()
        {
            System.out.println("sending message in A!!!");
        }
        public void receiveMsg()
        {
            System.out.println("receiving message in A!!!");
            this.setChanged();
            this.notifyObservers();
        }
        public static void main(String[] args) throws Exception
        {
            A a = new A();
            a.addObserver(new B());        for(int i=0;i<10;i++)
            {
                int t =0;
                while( (t=System.in.read())>=0)
                {
                    if (t == 'r')
                    {
                        a.receiveMsg();
                    }
                    else
                        System.out.println("waiting for receiving letter r!");
                }        }
        }
    }
      

  4.   

    程序B.java
    package com.test.csdn.others.b;
    import com.test.csdn.others.a.A;
    public class B implements java.util.Observer
    {
        public void update(java.util.Observable o,Object arg)
        {
            System.out.println("do action in B");
            ((A) o).sendMsg();
        }
    }
      

  5.   

    运行说明:
    直接运行A.java,之后会提示你输入文字。如果你在键盘随便输入的一行文字内含有小写英文字母r,则,程序A认为受到了消息。之后,B监听到了消息并打印“do action in B”,然后调用A的sendMsg(),模拟发送消息。如果你输入的一行文字内不含字母r,表示没发消息。A也不会发消息,会继续提示你输入。上述循环会执行10次。以便模拟接收消息的模型。
      

  6.   

    如果使用observer模式的话,当然也是可以,不过
    如果你要A能够监听B,B也能够监听A,那么必须
    两边都加上同时成为Observer和observable
      

  7.   

    A没必要再监听B了。B产生动作后,可以主动调用他监听对象的方法。
      

  8.   

    其实也就是互相引用的问题,可以在 A加入设置引用B的方法,在B中设置引用A的方法。
     A.setBref(B);
    B.setRef(A);
      

  9.   

    wolfsquare(狼平方) 的方法也可行。
      

  10.   

    TO:feiyuegaoshan(飞跃) 
    你说:"但程序写错了。B做动作,应该是B监听A的行为。"??楼主的要求:“若B有动作后,调用A类发送一个消息”,
    如果A不监听B的话,A能知道B什么时候有动作吗?(当然是就我的方法来说的,其他的实现先不考虑)
    你只是看到了楼主后面的一句:“若A收到一个消息,自动调用B完成一个动作”才认为应该B监听A的行为。
    当然可能我考虑的有些复杂,也不够周全,但程序思路是没问题的!
      

  11.   

    to : yuanmeng163(今天我有空) 
    也可:)SORRY:)