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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

问题:Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)
我的理解是:
匿名内部类的定义前提:
     内部类必须继承或者实现一个外部接口,格式如下:
       new 父类名称or接口名称(){子类的内容};
其实匿名内部类就是子类对象。
例子:
先定义一个接口:
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);
    }
}   

不知道理解的对不对。希望大家提些意见。谢谢,也希望对大家有所帮助

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

2 个回复

倒序浏览
应该不可以继承,因为匿名内部类没有类名,没有地方写继承语句啊...
回复 使用道具 举报
首先,就像你所说的匿名内部类存在的前提就是:

1、它是一个类的子类

2、它实现了一个接口


其次,在创建匿名内部类的时候为什么要有这样的一个限定呢?


其实我们从其名字“匿名内部类”中就可以猜个八九不离十了:


由于匿名内部类没有名字,所以到底怎样对它进行引用呢,而且到底其中都包含了哪些功能呢?

这就引出了匿名内部类存在的前提。



所以你的观点匿名内部类必须继承一个类或实现一个接口是正确的。

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马