黑马程序员技术交流社区

标题: 匿名内部类可否继承(实现)其它类(接口)? [打印本页]

作者: Jordon    时间: 2012-10-10 10:56
标题: 匿名内部类可否继承(实现)其它类(接口)?
匿名内部类可否继承(实现)其它类(接口)?请大神给说明原因,谢谢!!
作者: 王德超    时间: 2012-10-10 11:06
可以以implements做接口,进而实现类的继承。
作者: 沈佳龙    时间: 2012-10-10 11:08
匿名的内部类是没有名字的内部类。不能extends(继承)其它类,但一个内部类可以作为一个接口,由另一个内部类实现。
作者: 陈俊来    时间: 2012-10-10 12:24
内部类的用法几乎等同于一般类,只是使用外部类变量的时候需要将外部类变量设置为final.因为内部类使用外部变量时,仅仅使用的是他的一个副本,所以说,即便内部类使用的变量更改了,在外部类中也不会有变化,这也是sun为了提醒程序员的一种方法...
同样的,匿名内部类也可以继承或实现一类或方法,用法为:
JButton btn = new JButton("click");
btn.addActionListener(new ActionListener()
{
    public void actionPerformed(ActionEvent e){//some mothod...}
});
内部类除了实现一个接口也可以继承一个类,语法都是同上述的"new ActionListener()",(你也可以去继承一个适配器类,为了万无一失,我刚还专门测试了一下)
之所以swing用的内部类比较多,是因为他需要用到注册监听器机制,而该监听类如果只服务于一个组件,那么,将该类设置成内部类/匿名类是最方便的.

作者: 草上飞    时间: 2012-10-25 19:30
完全可以,
先定义一个接口:
interface   Contents   {
    int   value();
}

再定义一个类(构造函数不是默认的):
public   class   Wrapping   {
    private   int   i;
    public   Wrapping(int   x)   {   i   =   x;   }
    public   int   value()   {   return   i;   }
}

先实现接口:
public   class   Parcel6   {
    public   Contents   cont()   {
        return   new   Contents()   {
            private   int   i   =   11;
            public   int   value()   {   return   i;   }
        };   //   Semicolon   required   in   this   case
    }
    public   static   void   main(String[]   args)   {
        Parcel6   p   =   new   Parcel6();
        Contents   c   =   p.cont();
    }
}

再继承类:
public   class   Parcel7   {
    public   Wrapping   wrap(int   x)   {
        //   Base   constructor   call:
        return   new   Wrapping(x)   {   
            public   int   value()   {
                return   super.value()   *   47;
            }
        };   //   Semicolon   required
    }
    public   static   void   main(String[]   args)   {
        Parcel7   p   =   new   Parcel7();
        Wrapping   w   =   p.wrap(10);
    }
}   

作者: 赵红萍    时间: 2012-10-25 19:46
什么是匿名内部类,为什么要用它?




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