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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄捷 中级黑马   /  2012-6-1 16:17  /  2129 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

   看了匿名内部类,确实还有点接受不了那个写法,同时有点小疑问,如:
   abstract class AbsDemo
{
       abstract void show();
}
class outer
{
      int a=3;
      public void function()
{
    new AbsDemo()
{
     void show()
{
   System.out.println("a="+a);
}
}.show.();
}
}


ps:这是部分代码,当然格式也没怎么调,直接是在发帖对话框写的,将就先看下
问题:这个show方法是调用的哪个show方法啊,是匿名类的么?那为什么在里面才重写了,就可以直接调用呢?还有就是匿名内部类以后用到的多不多啊?

评分

参与人数 1技术分 +1 收起 理由
袁錦泰 + 1

查看全部评分

5 个回复

倒序浏览
你首先把匿名内部类拆分一下,其实就是new 父类或接口名().方法名(),只是你现在没法new这个对象,因为你必须实现里面的方法,所以你调用的show方法肯定就是你实现的那个方法喽

评分

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

查看全部评分

回复 使用道具 举报
匿名内部类一般在swing事件监听的时候,用的比较多,多线程中用的比较多...
回复 使用道具 举报
丰亚彬 发表于 2012-6-1 16:21
你首先把匿名内部类拆分一下,其实就是new 父类或接口名().方法名(),只是你现在没法new这个对象,因为你必 ...

明白,技术分给你了
回复 使用道具 举报
黄捷 发表于 2012-6-1 16:28
明白,技术分给你了

哈哈,谢谢斑竹大人
回复 使用道具 举报
本帖最后由 袁錦泰 于 2012-6-1 17:50 编辑
  1. clas ...  {
  2.     ...;
  3.     public static void main(String[] args)  {
  4.             Outer out = new Outer();
  5.             out.function();
  6. }
  7. class Outer  {
  8.         int a = 3;

  9.         public void function() {
  10.                 class Inner extends AbsDemo{
  11.                         void show(){
  12.                                 System.out.println("a="+a);
  13.                         }
  14.                 }
  15.                 Inner in = new Inner();
  16.                 in.show();
  17.                
  18.         }
  19. }
复制代码
这个和你的代码是一个效果,好好分析一下并不难理解.
只是把建立内部类继承抽象类,然后在内部类中复写抽象类方法,建立内部类对象调用show()方法这一步省略了,直接建立抽象类对象,复写抽象类中抽象方法并调用.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马