黑马程序员技术交流社区

标题: java匿名内部类 [打印本页]

作者: 开弓没有回头箭    时间: 2015-5-20 23:20
标题: java匿名内部类
本帖最后由 开弓没有回头箭 于 2015-5-20 23:25 编辑

内部类:在一个类的内部还有另一个类成为内部类,而该内部类在类的整个操作中只使用一次则可以将其定义为匿名内部类,匿名内部类是在抽象类及接口的基础上发展起来的
interface A{
        public void printInfo() ;        
}
class X {
        public void fun1(){
                this.fun2(new A(){
                                public void printInfo(){
                                        System.out.println("Hello World!!!") ;
                                }
                        }

                        ) ;
        }
        public void fun2(A a){
                a.printInfo() ;
        }
};
public class NoInnerClassDemo02{
        public static void main(String args[]){
                new X().fun1() ;                // 实例化X类的对象,并调用fun1()方法
        }
};

作者: 你们敬爱的人    时间: 2015-5-21 00:05
敢不敢简单点...看不懂阿.
作者: !85684009ex    时间: 2015-5-21 00:19
膜拜大神!半天上不来!
作者: 黯然残影    时间: 2015-5-21 00:19
学习学习
作者: AlianaGatsby    时间: 2015-5-21 00:46
java说万物皆对象,而对象是由类实例化而来的,理论上一个类中的内容是可以无限的,在无限的内容中细分出内部的一个类来描述其中的一种事物,我想这应该就是内部类存在的意义。接口最大的好处是减少代码间的耦合度,同时java的多实现也是通过接口来操作的。而抽象类作为超类,其子类必须实现其抽象方法,在这一点上抽象类和接口有着极大的相似性。而这一点相似的特性可以概括为:有一个需求,实现这个需求需要若干的方法,这时就可以将这些方法封装起来,但是对于不同的个体解决这个需求时使用的方法的具体内容是不同的,针对这种情况就可以使用接口或抽象类来封装,而且接口和抽象类都不能实例化对象,必须通过其子类来实例化,这也就意味着我们需要再去定义一个子类,此时若这个子类是短期型的,那么为了一两次的使用就取个类名定义一个类显然会使代码变得冗余。为了解决这个问题匿名内部类应运而生,有了匿名内部类我们不需要再另取一个类名去定义一个类,而只需要在需要的地方(这里肯定是在某个类的内部)通过像楼主红色代码的部分使用匿名内部类即可。另外注意一点巧妙的地方:接口和抽象类都是不能实例化对象的也就是说其前是不能new的,而当这种情况出现了也就意味着它是匿名内部类,而不是对接口或抽象类的实例化。
作者: guoyangpeng    时间: 2015-5-21 06:39
说的好,学习了
作者: 王连涛    时间: 2015-5-21 07:12
好猛,说的很详细啊。
作者: hzhzhen    时间: 2015-5-21 09:12
看他是怎么使用的  接着你就可以模范着用咯
作者: guojiadui    时间: 2015-5-21 09:15
看咯看,还行
作者: hzhzhen    时间: 2015-5-21 09:23
写的还不错啊。。。




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