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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

匿名内部类是否可以继承其它外部类?是否可以实现接口?

4 个回复

倒序浏览


完全可以,看下边的例子,摘自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);
    }
}   
回复 使用道具 举报
     楼主没有搞清楚匿名内部类是怎么来的哦。
     匿名内部类其实就是继承一个类或者实现接口的子类的对象,就是借用父类名或者接口名来new出自己的对象,它其实相当于一个类继承或实现接口后创建自己的对象,只不过匿名内部类是没有自己的类名的。
      匿名内部类一般用在参数传递,对象调用或者返回值上。
回复 使用道具 举报
何为匿名内部类,就是这个类不具有属于自己的类名

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

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

如果还想让它再继承一个什么类,或是实现一个什么接口,这个语法我真的不知道该怎么写……
因为如果是继承了一个类或者实现了接口了,那肯定不是一个已经已经存在的类了
那这个类的类名肯定不能是已经存在的类名,
那这个类名怎么写?
怎么 new?  
如果有了自己的类名又怎么还能被称之为匿名类呢?
这是矛盾的命题……
回复 使用道具 举报
谢谢大家 搞懂了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马