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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王晓斌 中级黑马   /  2013-1-28 16:00  /  1726 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王晓斌 于 2013-1-28 21:32 编辑

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

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

匿名内部类.JPG

评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1

查看全部评分

5 个回复

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

        abstract void show();
        
        /*InnerClass in;

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

        //你可以试试这种方式
        InnerClass in = new InnerClass(){         //相当于InnerClass的子类对象
                void show(){
               
                }
        };
}
回复 使用道具 举报

RE: 匿名内部类

刘军亭 发表于 2013-1-28 17:44
你上面的是抽象类,并不是枚举类,要想和枚举的效果相同,
public abstract class InnerClass{

我把类改为普通类,并new出了一个对象,还是无法创建~~~~不过我好像有点懂了,枚举中的就是一个对象,但类中的只是一个引用!而用new 父类则是一个实实在在的对象!!!
回复 使用道具 举报
枚举是java中的一种特殊的类,建议你好好看看张老师讲的枚举的课程,比较详细
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马