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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 冯佩 中级黑马   /  2013-1-21 20:24  /  2045 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张向辉 于 2013-1-22 13:00 编辑

都知道写匿名内部类需要父类或者接口,如果没有父类或者接口,还能写匿名内部类吗?为什么?请用代码举个实例。

点评

建议去看面向对象中的匿名对象视频。做好笔记  发表于 2013-1-22 12:26

11 个回复

倒序浏览
本帖最后由 李敬卫 于 2013-1-21 20:55 编辑

匿名内部类,其实就是没有类名,之所以匿名内部类需要继承父类或者实现接口的原因:你想想,一个没有类名的类怎么能创建对象呢?一个匿名内部类要想创建对
象该怎么办呢? 答案就是:这个匿名内部类必须要继承父类或者实现接口,这样通过new父类或接口来创建对象。这也就是匿名内部类定义的前提。希望楼主能看明白

评分

参与人数 1黑马币 +12 收起 理由
黄锦成 + 12

查看全部评分

回复 使用道具 举报
呃,这问题问得~
1,我们知道定义匿名内部类是为了简化内部类的书写
2,定义匿名内部类的前提就是继承一个类或者实现接口
3,匿名内部类格式是:
  new 父类或者接口(){定义子类内容}
你如果没有父类或者接口怎么套这个格式???

评分

参与人数 1黑马币 +12 收起 理由
黄锦成 + 12

查看全部评分

回复 使用道具 举报
class A{

new Object(){          //这就是一个不用父类和接口的匿名内部类,因为默认父类是Object(上帝)
        public void mothod(){
                System.out.println();
         }
}


}
回复 使用道具 举报
匿名内部类,其实就是为了简化书写,
当其里面涉及的代码不多时,简化书写可以运用
回复 使用道具 举报
                            关于匿名内部类的几点说明:
1.  匿名内部类必须继承一个父类,或实现一个接口,但最多只能继承一个父类,或实现一个接口。
2.  匿名内部类不能是抽象类,因为系统在创建匿名内部类的时候,会立即创建内部类的对象。
3.  匿名内部类不能定义构造器,因为匿名内部类没有类名,所以无法定义构造器,但匿名内部类可以定义实例初始化块,
        通过实例初始化块来完成构造器需要完成的事情。

4.如果匿名内部类需要访问外部类的局部变量,则必须使用final修饰符来修饰外部类的局部变量,
        否则系统将报错。
  
    使用匿名内部类课使代码更加简洁、紧凑,模块化程度更高。内部类能够访问外部内的一切成员变量和方法,包括私有的,而实现接口或继承类做不到。

然后就是:
两种实现方式:第一种,继承一个类,重写其方法;第二种,实现一个接口(可以是多个),实现其方法。

评分

参与人数 1黑马币 +12 收起 理由
黄锦成 + 12

查看全部评分

回复 使用道具 举报
刘军亭 发表于 2013-1-21 21:06
class A{

new Object(){          //这就是一个不用父类和接口的匿名内部类,因为默认父类是Object(上帝 ...

哥们,你的匿名内部类后面貌似少了个分号
回复 使用道具 举报
写匿名内部类的前提是有接口或父类
回复 使用道具 举报
刘军亭 发表于 2013-1-21 21:06
class A{

new Object(){          //这就是一个不用父类和接口的匿名内部类,因为默认父类是Object(上帝 ...

Object是父类。任何类都是Object的子类
回复 使用道具 举报
IC-月辰 发表于 2013-1-22 07:53
哥们,你的匿名内部类后面貌似少了个分号

不好意思啊,哥们这几天发帖回帖一个技术分也没有得,哎!这一着急就粗心大意的。哈哈
回复 使用道具 举报
黄锦成 发表于 2013-1-22 11:56
Object是父类。任何类都是Object的子类

也可以这样说吧
回复 使用道具 举报
任何类都是Object的子类,没有父类或者接口但是默认父类是Object,所以当然可以new匿名对象
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马