【Java面试题】13 Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?

1. 什么是匿名内部类?

内部类,存在于另一个类内部的类,而匿名内部类,顾名思义,就是没有名字的内部类。

2. 为什么需要匿名内部类?

每个内部类都能够各自继承某一实现类。因此,内部类不受限于外部类是否已继承某一实现类。
如果少了inner class所提供的“继承自多个具体(concrete)或抽象(abstract)类”的能力,设计上和编程上的某些问题会变得十分棘手。

所以,从某个角度来看inner class,你可以说它是多重继承问题的完整解决方案。interface能够解决其中一部分问题,但inner classes才能有效而实际地允许“多重实现继承(multiple implementation)”。也就是说,inner classes实际上允许你继承多个non-interface。
从这个层面上使用内部类时一般都是通过其父类或继承的接口来进行实例化和初始化的,如3中所示,这时内部类的名字是多余的,所以
就使用了匿名内部类。

3. 怎么实现匿名内部类?

匿名内部类的实现非常简单,如有一接口

Interface A{
    public void method();
}

这时你可以写一个如下的语句得到接口A的实现类的对象

A a = new A() {
    public void method() {
        System.out.println("hehe");
    }
};

而其中的

{ 
    public void method(){
        System.out.println("hehe");
} 
};

就是定义了一个匿名内部类

4. 问题答案

以上可看出匿名内部类在实现时须借助一个类或接口,从这个层次上讲它是可以继承其他类也可以实现接口的,
但通过extendsimplements关键字那是不可能的.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,930评论 18 399
  • 小编费力收集:给你想要的面试集合 1.C++或Java中的异常处理机制的简单原理和应用。 当JAVA程序违反了JA...
    八爷君阅读 10,166评论 1 114
  • Java 内部类 分四种:成员内部类、局部内部类、静态内部类和匿名内部类。 1、成员内部类: 即作为外部类的一个成...
    ikaroskun阅读 5,020评论 0 13
  • We believe that writing is about content, about what you ...
    hongXkeX阅读 4,453评论 1 1
  • JAVA面试题 1、作用域public,private,protected,以及不写时的区别答:区别如下:作用域 ...
    JA尐白阅读 4,860评论 1 0