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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 毛溯澜 于 2012-2-4 10:58 编辑

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

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

5 个回复

倒序浏览
匿名内部类是必须实现接口或者继承其他类,
因为匿名就是把子类的名字隐去用父类创建其子类对象,
要是没有继承和实现
如何创建?
回复 使用道具 举报
创建内部类的时候本身就是要实现其它的接口的,如
  1. public interface Content {
  2.         int value();
  3. }

  4. class Parcel{
  5.         public Content content(){
  6.                 return new Content(){
  7.                         private int i = 10;
  8.                         public int value(){
  9.                                 return i;
  10.                         }
  11.                 };
  12.         }
  13. }
复制代码
其实上面的内部类就相当于
  1. class Parcel{
  2.         class MyContent implements Content{
  3.                 private int i = 10;
  4.                 public int value(){
  5.                         return i;
  6.                 }
  7.         }
  8. }
复制代码
所以内部类可以继承类和实现接口的

评分

参与人数 1技术分 +1 收起 理由
荣凯旋 + 1

查看全部评分

回复 使用道具 举报
内部类必须是继承一个类或者实现接口。
匿名内部类的格式:new 父类或接口(){定义子类的内容}
其实匿名内部类就是一个带内容的匿名子类对象。

匿名内部类(from thinking in java 3th)
简单地说:匿名内部类就是没有名字的内部类。什么情况下需要使用匿名内部类?
如果满足下面的一些条件,使用匿名内部类是比较合适的:

1)只用到类的一个实例。
2)类在定义后马上用到。
3)类非常小(SUN推荐是在4行代码以下)
4)给类命名并不会导致你的代码更容易被理解。
   在使用匿名内部类时,要记住以下几个原则:
1)匿名内部类不能有构造方法。
2)匿名内部类不能定义任何静态成员、方法和类。
3)匿名内部类不能是public,protected,private,static。
4)只能创建匿名内部类的一个实例。
5)一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类。
6)因匿名内部类为局部内部类,所以局部内部类的所有限制都对其生效。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
匿名内部类是必须实现接口或者继承其他类,因为这是使用匿名内部类的前提啊!
使用匿名内部类就是想获得一个子类的对象,但是又不想建立这个子类,就用父类或接口名来 new一个对象.
既然要用父类或者接口名来new对象那当然要继承父类和实现接口啦。。。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
楼主可以去看下 java中的适配器类,在添加事件的时候用的一般都是匿名内部类 这个在GUI上用的很多,如MouseAdapter类  而MouseAdapter实现了好多的接口
  outputArea.addMouseListener(

            new MouseAdapter() {  

                     public void mousePressed( MouseEvent event )
               {
                  checkForTriggerEvent( event );
               }

              
               public void mouseReleased( MouseEvent event )
               {
                  checkForTriggerEvent( event );
               }

              
               private void checkForTriggerEvent( MouseEvent event )
               {
                  if ( event.isPopupTrigger() ) // 返回此鼠标事件是否为该平台的弹出菜单触发事件。
                     popupMenu.show(event.getComponent(),event.getX(), event.getY() );  
                 
               }

            }

         );

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

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