黑马程序员技术交流社区

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

作者: 张强1    时间: 2013-7-21 23:42
标题: 请教下匿名内部类
本帖最后由 杨兴庭 于 2013-7-22 21:19 编辑

Anonymous Inner Class(匿名内部类)是否可以extends其他类?是否可以implements接口?
作者: Rainbow    时间: 2013-7-21 23:50
匿名类本身就是通过继承类或者接口来实现的吧
作者: 冒烟的芒果    时间: 2013-7-22 00:22
可以,这些在视频教程里都有吧。学习的时候认真点。
作者: 月亮人生    时间: 2013-7-22 00:43
在网上搜到有两种解释
1.可以继承其他类或完成其他接口,在swing编程中常用此方式。
2.匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但一个内部类可以作为一个接口,由另一个内部类实现。

内部类的用法几乎等同于一般类,只是使用外部类变量的时候需要将外部类变量设置为final.因为内部类使用外部变量时,仅仅使用的是他的一个副本,所以说,即便内部类使用的变量更改了,在外部类中也不会有变化,这也是sun为了提醒程序员的一种方法...
同样的,匿名内部类也可以继承或实现一类或方法,用法为:
JButton btn = new JButton("click");
btn.addActionListener(new ActionListener()
{
    public void actionPerformed(ActionEvent e){//some mothod...}
});
内部类除了实现一个接口也可以继承一个类,语法都是同上述的"new ActionListener()",(你也可以去继承一个适配器类,为了万无一失,我刚还专门测试了一下)
之所以swing用的内部类比较多,是因为他需要用到注册监听器机制,而该监听类如果只服务于一个组件,那么,将该类设置成内部类/匿名类是最方便的.

匿名内部类实际上已经extends了一个父类了,一个类只能extends一个父类,
例:private void test(){
//匿名内部类,OutClass实例
new OutClass(){
//override something
}
}
等价于:

class InnerClass extends OutClass{
//override something
}

OutClass oc = new InnerClass();
作者: 张强1    时间: 2013-7-22 10:15
月亮人生 发表于 2013-7-22 00:43
在网上搜到有两种解释
1.可以继承其他类或完成其他接口,在swing编程中常用此方式。
2.匿名的内部类是没 ...

谢谢,讲解的很清楚
作者: Super_Class    时间: 2013-7-22 16:32
匿名内置类的前提就是 继承类或者实现一个接口。new  父类(接口){ ...}




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