黑马程序员技术交流社区

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

作者: 王晓斌    时间: 2013-1-28 16:00
标题: 匿名内部类
本帖最后由 王晓斌 于 2013-1-28 21:32 编辑

在类中,可以通过   new父类或接口
创建匿名子类,而在枚举中,可以用对象名加大括号来创建匿名子类,因此想在类中模仿下枚举,却是到处报错,想不通为什么?

匿名内部类.JPG (64.13 KB, 下载次数: 42)

匿名内部类.JPG

作者: 谢毅    时间: 2013-1-28 16:17
枚举是一个特殊的类,它的每个元素都是本身new出来的一个实例对象,你自己的代码只是建立了一个引用,但是该引用没有指向,也就是null,这时你用这个空的引用去做任何事都会有错的,就相当于int[] a = new int[3]; sop(a[2])是可以的,但是把a=null,你再重复sop(a[2])就出错了
作者: 李跃达    时间: 2013-1-28 17:16
枚举与内部类是不一样的,枚举有特殊性,他得变量可以写成子类的形式,而你右边这个,in是对象,这样写肯定是不行的,枚举中可以有变量当成子类,可以有抽象方法,
作者: 刘军亭    时间: 2013-1-28 17:44
你上面的是抽象类,并不是枚举类,要想和枚举的效果相同,
public abstract class InnerClass{

        abstract void show();
        
        /*InnerClass in;

        //这根本不是new一个对象
        in(){
                void show(){
                }
        };
        */

        //你可以试试这种方式
        InnerClass in = new InnerClass(){         //相当于InnerClass的子类对象
                void show(){
               
                }
        };
}
作者: 王晓斌    时间: 2013-1-28 21:32
标题: RE: 匿名内部类
刘军亭 发表于 2013-1-28 17:44
你上面的是抽象类,并不是枚举类,要想和枚举的效果相同,
public abstract class InnerClass{

我把类改为普通类,并new出了一个对象,还是无法创建~~~~不过我好像有点懂了,枚举中的就是一个对象,但类中的只是一个引用!而用new 父类则是一个实实在在的对象!!!
作者: 刘军亭    时间: 2013-1-28 21:37
枚举是java中的一种特殊的类,建议你好好看看张老师讲的枚举的课程,比较详细




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