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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 夏凡 中级黑马   /  2013-3-29 17:56  /  1773 人查看  /  12 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

匿名内部类是不是只能像下面这样出现在局部位置上?
  1. interface Inter
  2. {
  3.         void method();
  4. }

  5. class Test
  6. {
  7.         static Inter founction()
  8.         {
  9.                 return new Inter()
  10.                 {
  11.                         public void method()
  12.                         {
  13.                                 System.out.println("method run");
  14.                         }
  15.                 };
  16.         }

  17. }

  18. class  NamelessTest
  19. {
  20.         public static void main(String[] args)
  21.         {
  22.                 Test.founction().method();//关键在这个语句的解读
  23.                           //Test.founction说明founction方法是静态,返回一个对象
  24.         }
  25.         
  26. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

12 个回复

倒序浏览
内部类既可以放在成员位置上也可以放在局部位置上!看需求!
至于匿名的,好像一般都放在方法里,便于使用。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
匿名内部类是内部类的一种简化写法,而匿名内部类就是作为局部内部类而存在的。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
今天我也学习了匿名内部类,他的语法格式如下:
            new Classname(){
                  ...//内部类体
               };

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1 新人加油~

查看全部评分

回复 使用道具 举报
继续追问,或者结贴哦~
回复 使用道具 举报
匿名内部类,也可用用于实例成员赋值,以及作为方法的参数传递。基本上赋值语句右边都可以为匿名类。示例代码如下:
  1. class Class{
  2.    
  3.     // 使用匿名内部类为实例成员赋值
  4.     private Thread t = new Thread(){
  5.         public void run(){
  6.             System.out.println("thread");
  7.         }
  8.     };
  9.    
  10.     private JButton jbtn = new JButton();
  11.     public void addActionListener(ActionListener listener){
  12.         jbtn.addActionListener(listener);
  13.     };
  14.    
  15.     public static void main(String[] args){
  16.         Class c = new Class();
  17.         
  18.         // 匿名内部类作为参数传递
  19.         c.addActionListener(new ActionListener() {
  20.             @Override
  21.             public void actionPerformed(ActionEvent e) {
  22.                 System.out.println("button actionListener");
  23.             }
  24.         });
  25.     }
  26. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
内部类可以放在成员位置上,也可以放在局部位置上,放在局部位置上的内部类,不可以被成员修饰符修饰,也不可以访问它所在的局部变量。只能访问用final修饰的局部变量。原来我还以为这点用不上呢,没想到今天学java高新技术的时候还真用上了。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
匿名内部类可以访问包装类的成员,主要是它可以让类实现多个继承类的方法。它既可以放在局部位置,也可以出现在成员中。
回复 使用道具 举报
静态的方法,可以直接用类名.方法名调用。如果function()不是静态的,main()方法里就要改为new Test().founction().method();
回复 使用道具 举报
在一个类中又声明一个类,这个类就叫内部类,包含内部类的类叫外嵌类.可以存在成员位置,也可以存在局部位置,在外部类中可以创建方法去访问内部类的成员.因为内部类在使用时一般都是private 在局部时如果访问方法内的局部变量,这个变量必须是final修饰的。因为局部变量它的生命周期很短,当方法执行完,局部变量就被清理
回复 使用道具 举报
陈丽莉 发表于 2013-3-29 19:28
继续追问,或者结贴哦~

莉莉姐 我想说 这些回答里面没有我想要的答案  很多答非所问了
回复 使用道具 举报
夏凡 发表于 2013-3-31 22:26
莉莉姐 我想说 这些回答里面没有我想要的答案  很多答非所问了

那就追问哦~   放置这么久很不好滴~
回复 使用道具 举报
陈丽莉 发表于 2013-3-31 22:42
那就追问哦~   放置这么久很不好滴~

嗯 好的  麻烦莉姐啦
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马