黑马程序员技术交流社区

标题: 匿名内部类是否可以继承其它外部类?是否可以实现接口? [打印本页]

作者: 王自强    时间: 2012-8-28 01:08
标题: 匿名内部类是否可以继承其它外部类?是否可以实现接口?
匿名内部类是否可以继承其它外部类?是否可以实现接口?
作者: 来明坤    时间: 2012-8-28 01:29


完全可以,看下边的例子,摘自Think   in   Java,The   2nd   Edition.

先定义一个接口:
interface   Contents   {
    int   value();
}

再定义一个类(构造函数不是默认的):
public   class   Wrapping   {
    private   int   i;
    public   Wrapping(int   x)   {   i   =   x;   }
    public   int   value()   {   return   i;   }
}

先实现接口:
public   class   Parcel6   {
    public   Contents   cont()   {
        return   new   Contents()   {
            private   int   i   =   11;
            public   int   value()   {   return   i;   }
        };   //   Semicolon   required   in   this   case
    }
    public   static   void   main(String[]   args)   {
        Parcel6   p   =   new   Parcel6();
        Contents   c   =   p.cont();
    }
}

再继承类:
public   class   Parcel7   {
    public   Wrapping   wrap(int   x)   {
        //   Base   constructor   call:
        return   new   Wrapping(x)   {   
            public   int   value()   {
                return   super.value()   *   47;
            }
        };   //   Semicolon   required
    }
    public   static   void   main(String[]   args)   {
        Parcel7   p   =   new   Parcel7();
        Wrapping   w   =   p.wrap(10);
    }
}   

作者: 何明辉    时间: 2012-8-28 09:47
     楼主没有搞清楚匿名内部类是怎么来的哦。
     匿名内部类其实就是继承一个类或者实现接口的子类的对象,就是借用父类名或者接口名来new出自己的对象,它其实相当于一个类继承或实现接口后创建自己的对象,只不过匿名内部类是没有自己的类名的。
      匿名内部类一般用在参数传递,对象调用或者返回值上。

作者: 杨鹏鹏    时间: 2012-8-28 11:43
何为匿名内部类,就是这个类不具有属于自己的类名

只是在 new 出一个类的对象的时候,改写其中的某些方法,使之功能不同于原来的类
就是说在意义和功能上,这是一个新的类了,但是没有属于自己的类名,才被称之为匿名内部类

其实从原则上来说,这已经是一个实现了某个接口或者继承了某个类的新的类了

如果还想让它再继承一个什么类,或是实现一个什么接口,这个语法我真的不知道该怎么写……
因为如果是继承了一个类或者实现了接口了,那肯定不是一个已经已经存在的类了
那这个类的类名肯定不能是已经存在的类名,
那这个类名怎么写?
怎么 new?  
如果有了自己的类名又怎么还能被称之为匿名类呢?
这是矛盾的命题……
作者: 王自强    时间: 2012-8-29 13:36
谢谢大家 搞懂了




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