请高人指点!!!
下面代码可以运行也可以编译,无任何问题!但是却有个新问题,为什么test类实现了MouseMotionListener 后,并没有实现MouseMotionListener的所有方法也照样可以编译运行呢?这是不是违反了类实现接口的最基本原则,却又能成功编译运行?请高人指点下!
import java.awt.*;
import java.awt.event.*;
public class test extends MouseAdapter implements MouseMotionListener 
{        Frame f;
         int x;
 int y;
         Button b;
 Point or=new Point();
 Point p=new Point();    
      
public static void main(String[] args) 
{   new test();

}
     
 public test()
{    

          f=new Frame("testdrr2");
          f.setLayout(null);
          b=new Button("one");
          b.setSize(60,60);
          b.setLocation(80,80);
  
  

         b.addMouseListener(this);     b.addMouseMotionListener(this);

    f.add(b);
        
         
   f.setSize(200,200);
   f.setVisible(true);
}
      public void mousePressed(MouseEvent e)
          {   or.x=e.getX();
               or.y=e.getY();
   }
    
   public  void  mouseDragged(MouseEvent e) {    p=b.getLocation();
  

b.setLocation(p.x+e.getX()-or.x,p.y+e.getY()-or.y);

}
}

解决方案 »

  1.   

    MouseAdapter 有了适配器就不用实现所有方法
      

  2.   

    public class test extends MouseAdapter implements MouseMotionListener 
    看到没,你继承了这个MouseAdapter 
      

  3.   

    你implements MouseMotionListener  
    然后又继承了 MouseAdapter  (适配器)
     这就可以 实现一个方法了啊
    其实楼主 直接 extends MouseAdapter 就行了  不用在实现接口
      

  4.   

    以上的各位的解答本人不太满意。
    第一鼠标所产生的时件应该分为两类(MouseEvent,MouseMontionEvent); 
    他们是两类不同的事件。其二,MouseListener对应的Aapter类是MouseAdapter,而MouseMotionListener对应的Adapter类是MouseMotionAdapter. MouseAdapter类又怎么实现了MouseMotionListener中其他未在程序中声明的方法呢? 
    还有其他解释么?再说如果以上各位的解释成立的话,那说明test类继承了两个不同的类(MouseAdapter及MouseMotionAdapter),这与java的不能多重继承原则相冲突!我刚才试了下,就算test类不实现接口MouseMotionListener,依旧可以正常编译运行。
      

  5.   

    MouseAdapter实现了MouseMotionListener,它实现了三个接口:
    MouseListener, MouseWheelListener, MouseMotionListener,
    所以你没实现的方法,它替你实现了,
    你后边的implements是多余.
      

  6.   

    MouseAdapter implements MouseListener, MouseMotionListener, MouseWheelListener, EventListener
    LZ要多看java文档MouseAdapter已经实现了MouseMotionListener了
      

  7.   

    MouseAdapter  你继承了,适配器的问题。
      

  8.   

    在我这边不能编译运行,错误是没有实现接口。这个估计和jdk的版本有关。
      

  9.   

    我查了下API,MouseAdapter所有已实现的接口: 
    MouseListener, MouseMotionListener, MouseWheelListener, EventListener MouseAdapter实现的方法如下:
    void mouseClicked(MouseEvent e) 
              鼠标按键在组件上单击(按下并释放)时调用。 
     void mouseDragged(MouseEvent e) 
              鼠标按键在组件上按下并拖动时调用。 
     void mouseEntered(MouseEvent e) 
              鼠标进入到组件上时调用。 
     void mouseExited(MouseEvent e) 
              鼠标离开组件时调用。 
     void mouseMoved(MouseEvent e) 
              鼠标光标移动到组件上但无按键按下时调用。 
     void mousePressed(MouseEvent e) 
              鼠标按键在组件上按下时调用。 
     void mouseReleased(MouseEvent e) 
              鼠标按钮在组件上释放时调用。 
     void mouseWheelMoved(MouseWheelEvent e) 
              鼠标滚轮旋转时调用。 至于具体版本何时实现的请参考以下链接:http://gceclub.sun.com.cn/Java_Docs/jdk6/html/zh_CN/api/java/awt/event/MouseAdapter.html#mouseWheelMoved(java.awt.event.MouseWheelEvent)说明得非常详细!
    在此谢谢大家的热心帮助!!!!