黑马程序员技术交流社区

标题: 关于匿名内部类的一个小问题 [打印本页]

作者: 冯佩    时间: 2013-1-21 20:24
标题: 关于匿名内部类的一个小问题
本帖最后由 张向辉 于 2013-1-22 13:00 编辑

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

作者: 李敬卫    时间: 2013-1-21 20:53
本帖最后由 李敬卫 于 2013-1-21 20:55 编辑

匿名内部类,其实就是没有类名,之所以匿名内部类需要继承父类或者实现接口的原因:你想想,一个没有类名的类怎么能创建对象呢?一个匿名内部类要想创建对
象该怎么办呢? 答案就是:这个匿名内部类必须要继承父类或者实现接口,这样通过new父类或接口来创建对象。这也就是匿名内部类定义的前提。希望楼主能看明白
作者: 王晓斌    时间: 2013-1-21 20:59
呃,这问题问得~
1,我们知道定义匿名内部类是为了简化内部类的书写
2,定义匿名内部类的前提就是继承一个类或者实现接口
3,匿名内部类格式是:
  new 父类或者接口(){定义子类内容}
你如果没有父类或者接口怎么套这个格式???
作者: 刘军亭    时间: 2013-1-21 21:06
class A{

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


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

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

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


作者: 贾文泽    时间: 2013-1-22 07:53
刘军亭 发表于 2013-1-21 21:06
class A{

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

哥们,你的匿名内部类后面貌似少了个分号
作者: 黄锦成    时间: 2013-1-22 10:34
写匿名内部类的前提是有接口或父类
作者: 黄锦成    时间: 2013-1-22 11:56
刘军亭 发表于 2013-1-21 21:06
class A{

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

Object是父类。任何类都是Object的子类
作者: 刘军亭    时间: 2013-1-22 18:13
IC-月辰 发表于 2013-1-22 07:53
哥们,你的匿名内部类后面貌似少了个分号

不好意思啊,哥们这几天发帖回帖一个技术分也没有得,哎!这一着急就粗心大意的。哈哈
作者: 刘军亭    时间: 2013-1-22 18:14
黄锦成 发表于 2013-1-22 11:56
Object是父类。任何类都是Object的子类

也可以这样说吧
作者: 逍林游    时间: 2013-1-22 18:41
任何类都是Object的子类,没有父类或者接口但是默认父类是Object,所以当然可以new匿名对象




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