3种类内部的用法(成员,局部,匿名)

 1 package Inner;
 2 /**
 3  * 测试内部类的使用
 4  * @author 小王同学
 5  * 1.成员内部类 ①非静态内部类    ②静态内部类
 6  * 2.局部内部类
 7  * 3.匿名内部类
 8  * 总结: 内部类不只是普通的类,还可以是接口(Interface)默认static abstract修饰 ,抽象类(abstract)
 9  *         使用方法内部类时,一定要在内部类中调用一下内部类中的方法否则无法使用.  列如:new Inner3().test();
10  *         成员内部类就是类的一个成员变量. 
11  *         静态内部类只能使用外部类的静态成员. 普通内部类可以调用外部类的任何方法和属性,私有的也可以.
12  *         普通内部类就是方法的方法的一个局部变量,作用域只限于方法体中.
13  *         匿名内部类就是用来实现抽象方法或者是接口的抽象方法的.
14  *         使用匿名内部类实现抽象类的方法时,必须要抽象类声明为静态的(static)才行,因为在main方法中不能直接调用非静态方法.
15  */
16 public class Outer {
17     private String name;
18     private static  int age;
19     //1.测试成员内部类  
20     class Inner{
21     }
22     static class Inner2{
23          void run(){
24             System.out.println(age);//静态内部类只能使用外部类的静态成员。
25         }
26         }
27     //2.测试方法内部类
28         void testxx(){
29         int a =10;
30             class Inner3{
31                 public void test(){//内部累的方法,可以和外部类的方法重名.
32                     System.out.println("这是方法内部类");
33                     System.out.println("这是外部方法的局部变量:a="+a);
34                     System.out.println("这是外部方法的成员变量:age="+name);
35                 }     
36              
37     }
38 
39                 new Inner3().test();//方法内部类在这里调用,不然在外界没有办法访问到
40     }
41     //3.测试匿名内部类
42         interface  Inter { //接口和抽象方法也可以充当内部类使用
43             void show();
44         }
45          static abstract class Inner4{ //这里不加static的话,在使用匿名内部类时,就无法
46              abstract void  jump();
47         }
48         public static  void main(String[] args) {
49         //1.成员内部类 
50         /**两种定义非静态内部类的方法 */
51         Inner n1 =new Outer().new Inner();
52         Outer o1 =new Outer();
53         Inner n2 =o1.new Inner();
54         /**定义静态类的方法 */
55         Inner2 n3 =new  Outer.Inner2();//直接使用new 外部类.内部类();
56         //2.方法内部类
57         /**调用方法内部类的方法 */
58         new Outer().testxx();
59         //3.匿名内部类
60         /**这是实现接口的抽象方法*/
61         Inter t1= new Inter(){
62             @Override
63             public void show() {
64                 System.out.println("这是匿名内部类噢噢噢噢");        
65             }
66         };
67         t1.show(); //调用匿名内部类
68         /**实现抽象类的抽象方法 */
69         Inner4 in4 =new Inner4() {
70             @Override
71             void jump() {
72                 // TODO Auto-generated method stub
73                 
74             }
75         };
76 }
77 }

 

点赞