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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李有 中级黑马   /  2012-11-25 11:23  /  1616 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

匿名内部类 是否可以extends其它类,是否可以实现接口?

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

5 个回复

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

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

回复 使用道具 举报
匿名内部类就是内部类的简写格式。
而内部类必须要继承一个类或实现接口,所以匿名内部类也要继承一个类或实现接口。

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

回复 使用道具 举报
匿名内部类就是这个类,没有名字,但一定会有父类或者是实现的接口,两者只能选其一!我们通常写匿名类时,只是在继承一个抽象类,或者是实现一个接口。使用匿名类一定要在new语句中使用,new后面跟随的是父类或者接口名称,语法格式:new 父类或者接口名(){类体};  
回复 使用道具 举报
匿名类是不能有名称的类,所以没办法引用它们。必须在创建时,作为new语句的一部分来声明它们。这就要采用另一种形式的new语句,如下所示: new <类或接口> <类的主体> 这种形式的new语句声明一个新的匿名类,它对一个给定的类进行扩展,或者实现一个给定的接口。它还创建那个类的一个新实例,并把它作为语句的结果而返回。要扩展的类和要实现的接口是new语句的操作数,后跟匿名类的主体。如果匿名类对另一个类进行扩展,它的主体可以访问类的成员、覆盖它的方法等等,这和其他任何标准的类都是一样的。如果匿名类实现了一个接口,它的主体必须实现接口的方法。
回复 使用道具 举报
匿名内部类:没有名字的内部类。是内部类的简写形式。

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

格式为:
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();
        }
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马