Java面向对象之内部类(匿名内部类)

一、基础概念  

  匿名内部类:简化书写的内部类。其实匿名内部类就是一个子类对象。

  前提:内部类需要继承或者实现外部的类或者接口。

  格式:new 父类或者接口(){定义子类的内容}

二、将内部类定义到局部的实例代码  

 1 /*
 2 class Outer
 3 {
 4     int num = 2;
 5     //内部类
 6     class Inner
 7     {
 8         int num = 3;
 9         void show()
10         {
11             int num = 4;
12             System.out.println("show ..."+num);
13             System.out.println("show ..."+Inner.this.num);
14             System.out.println("show ..."+Outer.this.num);
15         }
16     }
17     public void method1()
18     {
19         new Inner().show();
20     }
21 }
22 */
23 
24 //将上面代码的内部类定义到局部位置上。
25 class Outer
26 {
27     private int num = 2;
28     public void method1()
29     {
30         final int x=3;  //内部类在局部时,只能被final修饰的局部常量,才可以被访问。
31         class Inner 
32         {
33             void show()
34             {
35                 int num = 4;
36                 System.out.println("x="+x);
37                 System.out.println("show ..."+num);
38                 System.out.println("show ..."+Outer.this.num);
39             }
40         }
41         
42         //创建内部类对象
43         Inner in = new Inner();
44         in.show();
45     }
46 }
47 
48 class InnerClassDemo2
49 {
50     public static void main(String[] args) 
51     {
52         new Outer().method1();
53     }
54 }

  

三、匿名内部类实例代码(一)

 1 abstract class Demo
 2 {
 3     abstract void show1();
 4 }
 5 
 6 class OuterDemo
 7 {
 8     int num = 4;
 9     /*
10     class Inner extends Demo
11     {
12         //复写
13         public void show1()
14         {
15             System.out.println("show1 ..."+num);
16         }
17     }
18     Inner in = new Inner();
19     in.show();
20     */
21     
22 //将上面注释的代码用匿名内部类的方式显示
23 
24     public void method2()
25     {
26         //匿名内部类
27         new Demo()
28         {
29             public void show1()
30             {
31                 System.out.println("show1 ..."+num);
32             }
33         }.show1();
34     }
35 }
36 
37 class InnerClassDemo2
38 {
39     public static void main(String[] args) 
40     {
41         new OuterDemo().method2();
42     }
43 }

  

四、匿名内部类实例代码(二)

 1 abstract class Demo
 2 {
 3     abstract void show1();
 4     abstract void show2();
 5 }
 6 
 7 class OuterDemo
 8 {
 9     int num = 4;
10     /*
11     class Inner extends Demo
12     {
13         //复写
14         public void show1()
15         {
16             System.out.println("show1 ..."+num);
17         }
18         public void show2()
19         {
20             System.out.println("show2 ..."+num);
21         }
22     }
23     Inner in = new Inner();
24     in.show();
25     */
26     
27     //将上面注释的代码用匿名内部类的方式显示
28     public void method2()
29     {
30         //匿名内部类
31         Demo a = new Demo()
32         {
33             void show1()
34             {
35                 System.out.println("show1 ..."+num);
36             }
37             void show2()
38             {
39                 System.out.println("show2 ..."+num);
40             }
41         };
42         a.show1();
43         a.show2();
44     }
45 }
46 
47 class InnerClassDemo2
48 {
49     public static void main(String[] args) 
50     {
51         new OuterDemo().method2();
52     }
53 }

  

原文地址:https://www.cnblogs.com/zhuxr/p/9003225.html