黑马程序员技术交流社区

标题: 匿名内部类 [打印本页]

作者: 王雷1    时间: 2013-11-27 09:45
标题: 匿名内部类
谁能给我写一个完整的在成员上而不是在局部的匿名内部类,还是匿名内部类就不能在成员的位置上只能在局部,我怎么写不出来,写出来eclipse就报错
作者: 0从谷0    时间: 2013-11-27 12:37
创建匿名内部类是实例一个对象,对象是不可以作为类成员的,可以是成员变量的值,也可以在成员方法中使用。作为类成员变量的值不能算是局部值(引用楼主:还是匿名内部类就不能在成员的位置上只能在局部)。
写个简单例子,没有实际意义.
public class Test {

        public static void main(String[] args) {

                KeyListener kl=new KeyAdapter(){
                       
                };
        }

}
作者: 0从谷0    时间: 2013-11-27 12:38
上面的代码没代表性,用下面的。
public class Test {

        KeyListener kl=new KeyAdapter(){
               
        };
}
作者: 王贺    时间: 2013-11-27 13:45
给你写个简单Demo,匿名类的话要有个继承接口或者是继承抽象类
//抽象类
abstract class InClass {
    public abstract void eat();
}
//定义Demo类
class Demo
{              //匿名内部类
        InClass in=new InClass(){

                @Override
                public void eat() {
                        // TODO Auto-generated method stub
                        System.out.print("我是匿名内部类");
                }
               
        };
}

//测试
public class Test12 {

        /**
         * @param args
         * @throws IOException
         */
         public static void main(String[] args) throws IOException {
               
                 Demo demo=new Demo();
                 demo.person.eat();

}


}

作者: 王雷1    时间: 2013-11-27 13:47
本帖最后由 王雷1 于 2013-11-27 14:07 编辑
王贺 发表于 2013-11-27 13:45
给你写个简单Demo,匿名类的话要有个继承接口或者是继承抽象类
//抽象类
abstract class InClass {


难道匿名内部类在成员上都要加引用?那匿名还有什么意义?直接定义内部类不就完了么?
作者: 王雷1    时间: 2013-11-27 14:11
王贺 发表于 2013-11-27 13:45
给你写个简单Demo,匿名类的话要有个继承接口或者是继承抽象类
//抽象类
abstract class InClass {

为刚才说的道情,:'(
作者: 王贺    时间: 2013-11-27 14:16
王雷1 发表于 2013-11-27 13:47
你真的分不清楚内部类和匿名内部类对么?                                                          难 ...

呵呵 哥们 我确定我分的请内部类和匿名内部类,内部类的话根本就没必要继承接口或者是抽象类什么的,既然是匿名内部类,那就该找个父类或者是接口什么的来进行具体啊,你觉得呢,难道哥们你就想这么写吗:
class Demo
{
   
   MyInClass inClass=new MyInClass(){
         //doSomeThing
    }
   
}
MyInClass没有任何继承什么的,就这么干写,你觉得靠谱吗?

再给你举个例子吧,一个按钮点击事件:
Button btn=new Button("点击");
btn.addActionListener(new ActionListener(){

@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
                               
}
});
这个应该是很好的一个解释吧

互相学习呗,哪里不对还望指导指导




作者: 王贺    时间: 2013-11-27 14:18
王雷1 发表于 2013-11-27 14:11
为刚才说的道情,

呵呵 没什么,互相学习呗
作者: 王雷1    时间: 2013-11-27 14:21
王贺 发表于 2013-11-27 14:16
呵呵 哥们 我确定我分的请内部类和匿名内部类,内部类的话根本就没必要继承接口或者是抽象类什么的,既然 ...

比如我要开一个线程,在本类中,直接开启就行,匿名内部类不是最好的选择么。但是匿名内部类如果在给加一个引用,那我要引用名。start才能开启,对么?可不可以在成员上没有引用的情况下定义内部类?你说的我还是没有怎么明白。
作者: 何超    时间: 2013-11-27 18:06
  1. abstract class M {
  2.         abstract void get();

  3. }

  4. public class D {

  5.         /**
  6.          * @param args
  7.          */
  8.         public static void main(String[] args) {
  9.                 new M() {
  10.                         public void get() {
  11.                         };
  12.                 };
  13.         }
  14. }
复制代码


没有报错啊!在成员位置上!
作者: FFF    时间: 2013-12-2 00:17
同学、问题已经解决了吗?
如果没有、就去新版28期问吧,26~27已经结束了。开班了!
http://bbs.itheima.com/forum-165-1.html

如果问题已经解决,请及时修改主题为“提问结束”。
修改主题的方法链接
http://bbs.itheima.com/thread-89313-1-1.html
如果没有解决,可能你的问题问得不够清楚。可以重新发问的哦~





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2