四种内部类

/**
* 内部类有四种
* 1,静态内部类
* 2,成员内部类
* 3,局部内部类
* 4,匿名内部类
*/


 1 /**
 2  * 内部类有四种
 3  * 1,静态内部类
 4  * 2,成员内部类
 5  * 3,局部内部类
 6  * 4,匿名内部类
 7  */
 8 
 9 public class TestInnerClass {
10     private final String name1="Outter";
11     private String name3="Test";
12     //静态内部类,用static修饰的内部类,不能访问外部类的非静态成分,对于外部类来说,相当于一个独立的类,在单例模式的懒汉式中有一种使用静态内部类的思路
13     //静态内部类对于外部类来说,只是包含的关系,缩小了命名空间,完整类名中多了一个外部类的名称,本质上是两个独立的类,JVM也不知道他两个之间的关系
14     public static class Inner1{
15         //。。。
16     }
17 
18     //成员内部类,需要外部类实例化了对象后才会被加载到JVM中,属于外部类的一个成员,可以访问外部类的静态和非静态成分
19     //创建实例是需要先创建一个外部类的实例,在用这个实例调用new语句
20     //对于成员内部类的构造方法,是系统自动为其传入外部类的引用,达到访问外部类成分的目的:   Inner2(Outter outter){...}
21     public class Inner2{
22         private final String name2="Inner2";
23         public String toString() {
24             System.out.println(name1);
25             return "Inner2{"+"name='" + name2 + '\'' + '}';
26         }
27     }
28 
29 
30     //局部内部类,在方法中定义的类,仅在定义它的方法中有效,作为方法短暂使用的类,不能用static关键字修饰,可以访问外部类的成员变量,能访问外部类static修饰的局部变量
31     //在方法中实例化
32     public void testInnerClass(){
33         class Inner3{
34             private String name4=name3;
35         }
36     }
37 
38     //匿名内部类,new一个接口。如:
39     Runnable runnable=new Runnable() {
40         @Override
41         public void run() {
42 
43         }
44     };
45 
46     public static void main(String[] args) {
47         TestInnerClass testInnerClass=new TestInnerClass();
48         Inner2 inner2=testInnerClass.new Inner2();
49         System.out.println(inner2);
50     }
51 }

 

posted @ 2020-02-25 14:14  codeFlyer  阅读(202)  评论(0编辑  收藏  举报