当有事件发生时  接口立即通知监视器调用方法(实现其接口的方法)  接口回调这一过程对程序是不可见的  
我想知道接口回调在这里是怎么体现出来的

解决方案 »

  1.   

    例子:
       监听button。当button被鼠标按了,
       就调用监听button的方法public void actionPerformed(ActionEvent arg0),
       接着执行里面的语句。(如果有多个组件需要通过ActionListener进行监听,那么只需要在方法:
    public void actionPerformed(ActionEvent arg0){
        if (arg0.getSource().equals(button1)){} 
        if (arg0.getSource().equals(button2)){}  
       }
     其中,2个if就是用于判断用户点击的是哪一个按钮 ) 就像你去打电玩一样,按了哪一个键,就执行那个键相对应的方法。
      

  2.   

      比如 如果在两个按钮btn1,btn2上添加了鼠标点击事件监听器MouseListener,即
    btn1.addMouseListner(new MouseMonitor()); 
    btn2.addMouseListener(new MouseMonitor());
    这个监听器类写为
    class MouseMonitor extends MouseAdapter {//在按钮上的监听器类
     public void mousePressed(MouseEvent e) {
       if(e.getSource() == btn1) {//如果事件源始按钮1,则这些下面操作
         System.out.println("btn1被按了一下");
       }
       if(e.getSource() == btn2) {//如果事件源始按钮1,则这些下面操作
         System.out.println("btn1被按了一下");
       }
     }
    }
      

  3.   

    比如 如果在两个按钮btn1,btn2上添加了鼠标点击事件监听器MouseListener,即
    btn1.addMouseListener(new MouseMonitor());  
    btn2.addMouseListener(new MouseMonitor());
    这个监听器类写为
    class MouseMonitor extends MouseAdapter {//在按钮上的监听器类
     public void mousePressed(MouseEvent e) {
      if(e.getSource() == btn1) {//如果事件源是按钮1,则执行下面操作
      System.out.println("btn1被按了一下");
      }
      if(e.getSource() == btn2) {//如果事件源是按钮2,则执行下面操作
      System.out.println("btn1被按了一下");
      }
     }
    }
    根据不同的事件源,执行不同的操作。从而产生不同的操作结果。
      

  4.   

    我想说的是 书上讲得是接口回调这一过程不可见 也就是细节问题没有讲出来  我想问的是  有谁知道 接口回调在内部是怎么实现的  
      比如说  public void  addMouseListener(new MouseMonitor())  函数的参数本来是接口类型
      但是传了一个实现该接口的类的对象  那么在addMouseListener这个函数的函数体里面  有没有这样的类似语句        
     public void  addMouseListener(Actionlistener x)  {    /*x是接口类型        x.mousePressed(MouseEvent e);
    }
    此时传了个实现接口类的对象   一旦有事情发生  接口调用函数mousePressed(MouseEvent e)  其实就是
    new MouseMonitor()这个对象调用函数 mousePressed(MouseEvent e)   
    所以在此体现了接口回调  不知道我这样的理解对不对。
      

  5.   

    这里有个观察者模式,当你addMouseListener时就将该MouseMonitor加入到了一个List中,当你触发了事件后,就会遍历List,调用MouseMonitor的mousePressed(MouseEvent e),也就是你定以的那方法了
      

  6.   

    interface SpeakHello 
    {   void speakHello();
    }
    class Chinese implements SpeakHello
    {  public  void speakHello() 
    {  System.out.println("中国人习惯问候语:你好,吃饭了吗? ");
       }
    }
    class English implements SpeakHello
    {   public  void speakHello()
     {  System.out.println("英国人习惯问候语:你好,天气不错 ");
        }
    }
    class KindHello
    {  public void lookHello(SpeakHello hello)  
       {  hello.speakHello();                   
       }
    }
    public class Example4_29
    {  public static void main(String args[]) 
     {  KindHello kindHello=new KindHello();
          kindHello.lookHello(new Chinese());
          kindHello.lookHello(new English());
       }
    }这就是一个接口回调的例子,接口回调就是实现接口变量调用方法。我感觉你想理解的就是过程,在你的理解中加入 x=new MouseMonitor();这么一句就更清楚吧,总的来说就是把实现接口的对象的引用付给了变量。
    希望对你有用。
      

  7.   

    补充: hello.speakHello(); 就是接口回调,hello是接口变量,kindHello.lookHello(new Chinese());kindHello.lookHello(new English());这两句我觉得可以理解为接口存放对象的引用,hello=new Chinese();hello=new English();
     hello.speakHello(); 就可以变为 new Chinese().speakHello(); new English().speakHello(); 你就是这样理解的吧,我觉得就是这样。
    因为我也不是很懂,所以你就适当理解吧。