A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 林其荣 中级黑马   /  2013-1-22 21:22  /  1335 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张向辉 于 2013-1-23 10:25 编辑

如果定义一个匿名内部类就需要覆盖抽象类或者实现接口的全部方法可是我发现
我在定义一个监听事件MouseAdapter的时候我只覆盖了一个方法也可以并不用覆盖其抽象类的全部方法 谁能解释下为什么定义这个MouseAdapter的时候只覆盖
一个方法也可以而不是覆盖全部方法呢
例如我定义了个匿名内部类这个就需要覆盖全部方法才可以
  fz f=new fz();
  f.demo(new z(){
   public int show(){
    return 5;
   }
   public int show1(){
    return 4;
   }
  
  }.show());
}
}
abstract class z{
abstract int show();
abstract int show1();
}
class fz{
public void demo(int a){
  System.out.println(a);
}
}
以上这个需要全部覆盖才可以.
Eventdome1(){
  frameshow();
}
public void frameshow(){
  frame =new Frame("窗口");
  frame.setBounds(300, 250, 600, 500);
  frame.setLayout(new FlowLayout());
  text=new TextField(15);
  but=new Button(" 按 钮  ");
  frame.add(text);
  frame.add(but);
  frame.setVisible(true);
  Evertshow();
}
public void Evertshow(){

  //按钮双击关闭动作
  but.addMouseListener(new MouseAdapter(){//为什么这个匿名内部类只覆盖一个方法也可以?
   
   public void mouseClicked(MouseEvent e)
  {  
   if(e.getClickCount()==2 ){
   System.exit(0);
   System.out.println("双击关闭");
   }
  
   }
   
  }
);
而这个为什么覆盖一个也可以呢?

评分

参与人数 1黑马币 +9 收起 理由
Rancho_Gump + 9 赞一个!

查看全部评分

2 个回复

倒序浏览
虽说MouseAdapter是抽象类,但是它里面的方法都是已经实现了的。没有抽象方法。所以覆写自己想要的方法就行了
回复 使用道具 举报
MouseAdapter确实是个抽象类,但是所谓的要覆盖抽象类中的方法指的其实是它内部的抽象方法呀,而它内部没有抽象方法呀,你就算一个都不覆盖也能编译通过!它其实就是把鼠标事件接口中的抽象方法都用一个没有函数体的方法覆盖了,这样我们要处理鼠标事件的时候只用去覆盖其中我们需要处理的方法就行了,简化书写

评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马