黑马程序员技术交流社区

标题: 匿名内部类的问题 [打印本页]

作者: 沈子豪    时间: 2013-3-13 12:33
标题: 匿名内部类的问题
本帖最后由 沈子豪 于 2013-3-13 18:45 编辑

匿名内部类是否可以extends继承其它类,是否可以implements(实现)interface(接口)?
作者: HM张超    时间: 2013-3-13 13:20
本帖最后由 shenbeiaia 于 2013-3-13 14:01 编辑

一种是继承Thread一种是实现 Runnable接口。
第一种:
new Thread(){
                        public void run(){
       //执行
};
}.start();

第二种:
new Thread(new Runnable() {
                        public void run() {
        //执行
};
}) {
}.start();
作者: HM刘俊    时间: 2013-3-13 13:38
匿名内部类是一个特殊的内部类。他比内部类多出的2点特殊之处就是,
1;没有名字
2;匿名内部类无法显示的继承某个类或实现某个接口。
希望能帮到你一点点
作者: 437857487    时间: 2013-3-13 16:36
匿名的内部类是没有名字的内部类。不能extends(继承)其它类,但一个内部类可以作为一个接口,由另一个内部类实现
作者: 郑昌奋    时间: 2013-3-13 16:44
匿名内部类就是 继承了父类或实现了接口后 new 父类名或接口名(){ 复写方法  }     这样才存在的    如果没有父类或实现接口  是无法建立匿名内部类的.所以是可以存在继承和实现接口的
作者: 沉默de羔羊    时间: 2013-3-13 17:11
理论上,是可以实现继承的如下面代码:

new OutClass(){//方法体};
其中:{//方法体}是匿名内部类
他等价于:
OutClass out = new 匿名内部类();
下面是匿名内部类的情况:
class 匿名内部类 extends OutClass{//方法体}
但是呢,由于没有名字,所以没办法使用extends关键字。

同理,他理论上是可以实现的,如下代码:
Interface Test{ public void a();}
Test test=new Test(){ public void a(){//方法体} };
其中:{ public void a(){//方法体} }是匿名内部类

同理反正就是没法使用implements进行实现。

作者: 袁术森    时间: 2013-3-13 17:12
呵呵 匿名内部类 本身存在的前提就是内部类需要继承或者实现一个类或者接口。
  1. interface Inter
  2. {
  3.         void show();
  4. }
  5. class Outer
  6. {
  7.         private int num=2;
  8.         /*class Inner implements Inter
  9.         {
  10.                 public void show()
  11.                 {
  12.                         System.out.println("num="+num);
  13.                 }
  14.         }*/
  15.         public void method()
  16.         {
  17.                 /*Inner in=new Inner();
  18.                 in.show();*/
  19.                 new Inter()//匿名内部类其实就是一个匿名子类对象,后面有{},里面定义了成员内容。
  20.                 {
  21.                         public void show()//对父类中的函数进行覆盖,并进行自定义内容
  22.                         {
  23.                                 System.out.println("num="+num);
  24.                         }
  25.                 }.show();
  26.         }
  27. }
  28. class Demo
  29. {
  30.         public static void main(String[] args)
  31.         {
  32.                 Outer out=new Outer();
  33.                 out.method();
  34.         }
  35. }
复制代码
注释掉的部分 就是内部类的常规写法。




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