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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 开弓没有回头箭 中级黑马   /  2015-5-20 23:20  /  539 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 开弓没有回头箭 于 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()方法
        }
};

9 个回复

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