黑马程序员技术交流社区

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

作者: 李有    时间: 2012-11-25 11:23
标题: 匿名内部类的问题。
匿名内部类 是否可以extends其它类,是否可以实现接口?
作者: 崔利鹏    时间: 2012-11-25 11:45
内部类的用法几乎等同于一般类,只是使用外部类变量的时候需要将外部类变量设置为final.因为内部类使用外部变量时,仅仅使用的是他的一个副本,所以说,即便内部类使用的变量更改了,在外部类中也不会有变化,这也是sun为了提醒程序员的一种方法...同样的,匿名内部类也可以继承或实现一类或方法,用法为:
JButton btn = new JButton("click");
btn.addActionListener(new ActionListener(){  
public void actionPerformed(ActionEvent e){//some mothod...}});
内部类除了实现一个接口也可以继承一个类,语法都是同上述的"new ActionListener()",(你也可以去继承一个适配器类,为了万无一失,我刚还专门测试了一下)之所以swing用的内部类比较多,是因为他需要用到注册监听器机制,而该监听类如果只服务于一个组件,那么,将该类设置成内部类/匿名类是最方便的。
作者: 郑丹丹    时间: 2012-11-25 12:01
匿名内部类就是内部类的简写格式。
而内部类必须要继承一个类或实现接口,所以匿名内部类也要继承一个类或实现接口。
作者: 王舒玮    时间: 2012-11-25 22:09
匿名内部类就是这个类,没有名字,但一定会有父类或者是实现的接口,两者只能选其一!我们通常写匿名类时,只是在继承一个抽象类,或者是实现一个接口。使用匿名类一定要在new语句中使用,new后面跟随的是父类或者接口名称,语法格式:new 父类或者接口名(){类体};  
作者: 王斌    时间: 2012-11-26 16:27
匿名类是不能有名称的类,所以没办法引用它们。必须在创建时,作为new语句的一部分来声明它们。这就要采用另一种形式的new语句,如下所示: new <类或接口> <类的主体> 这种形式的new语句声明一个新的匿名类,它对一个给定的类进行扩展,或者实现一个给定的接口。它还创建那个类的一个新实例,并把它作为语句的结果而返回。要扩展的类和要实现的接口是new语句的操作数,后跟匿名类的主体。如果匿名类对另一个类进行扩展,它的主体可以访问类的成员、覆盖它的方法等等,这和其他任何标准的类都是一样的。如果匿名类实现了一个接口,它的主体必须实现接口的方法。
作者: 潘天功    时间: 2012-11-26 16:43
匿名内部类:没有名字的内部类。是内部类的简写形式。

前提:
        内部类可以继承或实现一个外部类或者接口。

格式为:
new 外部类名或者接口名(){覆盖类或者接口中的代码,(也可以自定义内容。)};
具体代码体现:

interface Inter
{
        public abstract void show();
        public abstract void show2();
}

class Outer
{
        public void method()
        {
                //匿名内部类
                new Inter() //返回的是接口的子类匿名对象
                {
                        public void show()
                        {
                                System.out.println("show");
                        }

                        public void show2()
                        {
                                System.out.println("show2");
                        }
                };

                //如果调用方法呢?
                new Inter() //返回的是接口的子类匿名对象
                {
                        public void show()
                        {
                                System.out.println("show");
                        }

                        public void show2()
                        {
                                System.out.println("show2");
                        }
                }.show();

                new Inter() //返回的是接口的子类匿名对象
                {
                        public void show()
                        {
                                System.out.println("show");
                        }

                        public void show2()
                        {
                                System.out.println("show2");
                        }
                }.show2();

                //上面调用太麻烦 多态
                Inter i = new Inter() //返回的是接口的子类匿名对象
                {
                        public void show()
                        {
                                System.out.println("show");
                        }

                        public void show2()
                        {
                                System.out.println("show2");
                        }
                };

                i.show();
                i.show2();
        }
}

class NiMingInnerClassDemo2
{
        public static void main(String[] args)
        {
                Outer o = new Outer();
                o.method();
        }
}





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