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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 没有为什么 初级黑马   /  2016-3-6 15:26  /  508 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

昨天刚学的匿名类,真是听懵了。有大神给我讲讲怎么回事吗?怎么使用

1 个回复

倒序浏览
匿名内部类:没有名字的内部类。它是内部类的简化写法。
                       
                        A:前提://内部类必须继承或实现一个外部类或者接口。
                       
                        B:格式为:new 继承的父类或者接口名(){覆盖子类或者接口中的代码,(也可以自定义子类的内容。)}
                       
                        C:简单理解:其实匿名内部类就是一个匿名子类对象。而且这个对象有点胖。可以理解为///带内容的对象。
                       
                        D: a,继承式的匿名内部类
                           b,接口式(也可以叫实现式的,名字无所谓)的匿名内部类
                           c,参数式的匿名内部类
                       

                                interface Inter {
                                        public abstract void show1();
                                        public abstract void show2();
                                }
                                       
                                //有名字的内部类
                                class Outer {
                                        public void method(){
                                                class Inner implements Inter {
                                                        public void show1(){              //子类必须覆盖接口中的所有方法
                                                                System.out.println("show1");
                                                        }

                                                        public void show2(){
                                                                System.out.println("show1");
                                                        }
                                                }
                                        }
                                        public void show() {
                                                Inter in = new Inner();              //父类引用指向子类对象
                                                in.show1();
                                                in.show2();

                                        }
                                }

                                //匿名内部类(重点,android里面用的多,awt的监听器用的多)
                                class Outer {
                                        public void method() {
                                                //匿名内部类对象调用方法   只能调用一次
                                                new Inter() {
                                                        public void show1() {
                                                                System.out.println("show1");
                                                        }

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

                                                new Inter() {            //在此建立调用show2()
                                                        public void show1() {
                                                                System.out.println("show1");
                                                        }

                                                        public void show2(){
                                                                System.out.println("show2");
                                                        }
                                                }.show2();
                                               
                                                //匿名内部类对象的另一种调用方式,父类引用指向子类对象(多态)
                                                Inter in = new Inter() {            
                                                        public void show1() {
                                                                System.out.println("show1");
                                                        }

                                                        public void show2() {
                                                                System.out.println("show1");
                                                        }
                                                };
                                                in.show1();
                                                in.show2();       //如果父类Intet中没有show2()的方法,这里就编译失败,因为父类中没定义过,只能使用子类的方法
                                        }
                                }

                (5)什么时候使用匿名内部类呢?
                           通常在使用方法是接口类型参数,并该接口中的方法不超过三个时,可以将匿名内部类作为参数传递。
                           也就是说,//匿名内部类中定义的方法最好不要超过三个[/code]
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马