Java中,匿名内部类在开发中的使用以及匿名内部类的面试题

简介: 匿名内部类在开发中的使用   我们在开发的时候,会看到抽象类,或者接口作为方法的形式参数。   而这个时候,我们知道实际需要的是一个子类的对象。   如果该方法仅仅调用一次,我们就可以使用匿名内部类的格式进行简化。

匿名内部类在开发中的使用

  我们在开发的时候,会看到抽象类,或者接口作为方法的形式参数。
  而这个时候,我们知道实际需要的是一个子类的对象。
  如果该方法仅仅调用一次,我们就可以使用匿名内部类的格式进行简化。

  Android开发中这种格式见得多,
  JavaEE开发中见得少。

  为什么呢?
  因为匿名内部类的好处是:
    匿名内部类用完之后就是垃圾(即只能用一次),就可以立即被垃圾回收器回收,
    栈内存没有东西指向你,Android的手机内存小,要及时让这个对象被回收。

示例代码如下:

 1 /*
 2     匿名内部类在开发中的使用:
 3         Android开发中这种格式见得多,
 4         JavaEE开发中见得少。
 5         
 6         为什么呢?
 7         因为匿名内部类的好处是:
 8             匿名内部类用完之后就是垃圾(即只能用一次),就可以立即被垃圾回收器回收,
 9             栈内存没有东西指向你,Android的手机内存小,要及时让这个对象被回收。
10 */    
11 
12 //定义一个接口
13 interface Person {
14     public abstract void study();
15 }
16 
17 //定义具体类实现接口
18 class Student implements Person {
19     public void study() {
20         System.out.println("好好学习,天天向上");
21     }
22 }
23 
24 //方法的形式参数为接口时,需要的是该接口的实现类的对象。
25 class PersonDemo {
26     //接口名作为方法的形式参数
27     //其实这里需要的不是接口,而是该接口的实现类的对象
28     public void method(Person p) {
29         p.study();
30     }
31 }
32 
33 class InnerClassTest2 {
34     public static void main(String[] args) {
35         //法一:测试PersonDemo类中的method方法。
36         PersonDemo pd = new PersonDemo();
37         Person p = new Student();
38         pd.method(p);
39         System.out.println("--------------------");
40         
41         //法二:匿名内部类在开发中的使用:
42         //匿名内部类的本质是该类的子类或者实现该接口的实现类(子类)的匿名对象。
43         pd.method(new Person(){
44             public void study() {
45                 System.out.println("好好学习,天天向上");
46             }
47         });
48     }
49 }
50 
51 运行结果为:
52 好好学习,天天向上
53 --------------------
54 好好学习,天天向上

匿名内部类的面试题

  按照要求,补齐代码
    interface Inter {

       void show();

     }
    class Outer {
      //补齐代码
    }
    class OuterDemo {
      public static void main(String[] args) {
        Outer.method().show();
      }
    }
  要求在控制台输出”HelloWorld”

示例代码如下:

 1 /*
 2 匿名内部类的面试题:
 3     按照要求,补齐代码
 4         interface Inter { 
 5             void show(); 
 6         }
 7         class Outer { 
 8             //补齐代码 
 9         }
10         class OuterDemo {
11             public static void main(String[] args) {
12                   Outer.method().show();
13               }
14         }
15         要求在控制台输出”HelloWorld”
16 */
17 interface Inter {
18     void show();
19     // public abstract
20 }
21 
22 class Outer {
23     // 补齐代码
24     public static Inter method() {
25         // 子类对象 -- 子类匿名对象是子类对象的一种
26         return new Inter() {
27             public void show() {
28                 System.out.println("HelloWorld");
29             }
30         };
31         
32     }
33 }
34 
35 class OuterDemo {
36     public static void main(String[] args) {
37         Outer.method().show();
38         /*
39          * 1:Outer.method()可以看出method()应该是Outer中的一个静态方法。
40          * 2:Outer.method().show()可以看出method()方法的返回值是一个对象。
41          *         又由于接口Inter中有一个show()方法,所以我认为method()方法的返回值类型是一个接口。
42          */
43     }
44 }

 

我的GitHub地址: https://github.com/heizemingjun
我的博客园地址: http://www.cnblogs.com/chenmingjun
我的蚂蚁笔记博客地址: http://blog.leanote.com/chenmingjun
Copyright ©2018 黑泽明军
【转载文章务必保留出处和署名,谢谢!】
相关文章
|
3月前
|
人工智能 前端开发 Java
2025年WebStorm高效Java开发全指南:从配置到实战
WebStorm 2025不仅是一款强大的JavaScript IDE,也全面支持Java开发。本文详解其AI辅助编程、Java特性增强及性能优化,并提供环境配置、高效开发技巧与实战案例,助你打造流畅的全栈开发体验。
293 4
|
3月前
|
前端开发 JavaScript Java
Java 开发中 Swing 界面嵌入浏览器实现方法详解
摘要:Java中嵌入浏览器可通过多种技术实现:1) JCEF框架利用Chromium内核,适合复杂网页;2) JEditorPane组件支持简单HTML显示,但功能有限;3) DJNativeSwing-SWT可内嵌浏览器,需特定内核支持;4) JavaFX WebView结合Swing可完美支持现代网页技术。每种方案各有特点,开发者需根据项目需求选择合适方法,如JCEF适合高性能要求,JEditorPane适合简单展示。(149字)
298 1
|
3月前
|
缓存 Java API
Java 面试实操指南与最新技术结合的实战攻略
本指南涵盖Java 17+新特性、Spring Boot 3微服务、响应式编程、容器化部署与数据缓存实操,结合代码案例解析高频面试技术点,助你掌握最新Java技术栈,提升实战能力,轻松应对Java中高级岗位面试。
331 0
|
3月前
|
安全 Java 领域建模
Java 17 探秘:不容错过的现代开发利器
Java 17 探秘:不容错过的现代开发利器
123 0
|
13天前
|
消息中间件 人工智能 Java
抖音微信爆款小游戏大全:免费休闲/竞技/益智/PHP+Java全筏开源开发
本文基于2025年最新行业数据,深入解析抖音/微信爆款小游戏的开发逻辑,重点讲解PHP+Java双引擎架构实战,涵盖技术选型、架构设计、性能优化与开源生态,提供完整开源工具链,助力开发者从理论到落地打造高留存、高并发的小游戏产品。
|
13天前
|
存储 Java 关系型数据库
Java 项目实战基于面向对象思想的汽车租赁系统开发实例 汽车租赁系统 Java 面向对象项目实战
本文介绍基于Java面向对象编程的汽车租赁系统技术方案与应用实例,涵盖系统功能需求分析、类设计、数据库设计及具体代码实现,帮助开发者掌握Java在实际项目中的应用。
36 0
|
2月前
|
安全 Java 数据库
Java 项目实战病人挂号系统网站设计开发步骤及核心功能实现指南
本文介绍了基于Java的病人挂号系统网站的技术方案与应用实例,涵盖SSM与Spring Boot框架选型、数据库设计、功能模块划分及安全机制实现。系统支持患者在线注册、登录、挂号与预约,管理员可进行医院信息与排班管理。通过实际案例展示系统开发流程与核心代码实现,为Java Web医疗项目开发提供参考。
96 2
|
2月前
|
JavaScript 安全 前端开发
Java开发:最新技术驱动的病人挂号系统实操指南与全流程操作技巧汇总
本文介绍基于Spring Boot 3.x、Vue 3等最新技术构建现代化病人挂号系统,涵盖技术选型、核心功能实现与部署方案,助力开发者快速搭建高效、安全的医疗挂号平台。
140 3

热门文章

最新文章