前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java中,匿名内部类在开发中的使用以及匿名内部类的面试题

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

作者头像
黑泽君
发布2018-10-11 17:09:28
1.4K0
发布2018-10-11 17:09:28
举报
文章被收录于专栏:黑泽君的专栏黑泽君的专栏

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

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

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

示例代码如下:

代码语言:javascript
复制
 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”

示例代码如下:

代码语言:javascript
复制
 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 }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-02-19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档