内部类

1.静态内部类

 1 package innerclass;
 2 /*
 3  * 静态内部类
 4  * 静态类只能访问外部类的静态成员变量或方法
 5  * StaticInner.Inner inner = new StaticInner.Inner();
 6  */
 7 class StaticInner
 8 { 
 9     private static int a = 4;
10 
11     public static class Inner
12     {
13         public void test()
14         {
15             System.out.println(a);
16         }
17     }
18 }
19 
20 public class StaticInnerClassTest
21 {
22     public static void main(String[] args)
23     {
24         //定义静态内部类的吗对象
25         StaticInner.Inner inner = new StaticInner.Inner();
26 
27         inner.test();
28     }
29 }

2.成员内部类

 1 package innerclass;
 2 /*
 3  * 成员内部类
 4  * 可以访问一切的外部的成员变量和方法
 5  * MemberInner.Inner2 inner = (new MemberInner()).new Inner2();
 6  */
 7 class MemberInner
 8 {
 9     private int a = 4;
10     
11     public class Inner2
12     {
13         
14         private int a = 5;
15         
16         //访问外部类的成员变量
17         public void doSomething()
18         {
19             System.out.println(MemberInner.this.a);
20         }
21         
22         //访问内部类的成员变量
23         public void doSomething1()
24         {
25             System.out.println(this.a);
26             System.out.println(a);
27         }
28         
29     }
30     
31     public void method()
32     {
33         //在外部类中创建内部类
34         MemberInner.Inner2 inner = this.new Inner2();
35         Inner2 inner2 = this.new Inner2();
36     }
37 }
38 
39 public class MemberInnerClassTest
40 {
41     public static void main(String[] args)
42     {
43         //定义成员内部类对象
44         MemberInner.Inner2 inner = (new MemberInner()).new Inner2();
45 
46         inner.doSomething();        
47     }
48 }

3.局部内部类

 1 package innerclass;
 2 /*
 3  * 局部内部类
 4  * 不能用public,protected,private,static修饰
 5  * 只能访问final修饰的局部变量
 6  */
 7 class LocalInner
 8 {
 9     public void doSomething()
10     {
11         final int a = 4;
12         
13         class Inner3
14         {
15             public void test()
16             {
17                 System.out.println(a);
18             }
19         }
20         
21         (new Inner3()).test();
22     }
23 }
24 
25 public class LocalInnerClassTest
26 {
27     public static void main(String[] args)
28     {
29         LocalInner localInner = new LocalInner();
30         
31         localInner.doSomething();
32         
33     }
34 }

4.匿名内部类

 1 package innerclass;
 2 /*
 3  * 匿名内部类(局部内部类的一种形式)
 4  * 没有名字的类
 5  * 没有关键字class,extends,implements
 6  * 没有构造方法
 7  * 匿名内部类会隐式地继承一个父类或实现一个接口。
 8  */
 9 import java.util.Date;
10 public class AnonymousInnerClassTest
11 {
12     @SuppressWarnings("deprecation")
13     public String get(Date date)
14     {
15         return date.toLocaleString();
16     }
17      
18     public static void main(String[] args)
19     {
20         AnonymousInnerClassTest test = new AnonymousInnerClassTest();
21         
22         //String str = test.get(new Date());;
23         //System.out.println(str);
24         
25         //定义一个匿名内部类,它继承了Date类(或者实现某一个接口)
26         String str = test.get(new Date()
27         { 
28             //重写Date类的toLocaleString()方法
29             public String toLocaleString()
30             {
31                 return "hello world";
32             }
33         });
34         System.out.println(str);
35     }    
36 }

 

你可能感兴趣的:(内部类)