Java内部类的分类及特点

 

类成员包括:字段、方法、内部类

内部类被看成是 字段级别。

内部类

什么是内部类:定义类结构中的另一个类。

为什么使用内部类

        1 增强封装性:将内部类隐藏在外部类中。防止其他类访问内部类。

        2 提高可读性和可维护性。

        3 内部类可以直接访问外部类的成员变量和方法。

根据修饰符或者定位四种内部类

        ① 实例内部类:内部类没有使用static修饰

        ② 静态内部类:内部类使用static修饰

        ③ 局部内部类:在方法中的内部类

        ④ 匿名内部类:适合于仅使用一次的类,属于局部内部类的特殊情况

对于每个内部类来说:java编译器会生成独立的.class文件

        成员内部类:外部类名字$内部类名字

        局部内部类:外部类名字$数字 内部类名字

        匿名内部类:外部类名字$数字


静态内部类

        使用static 修饰内部类,说明静态内部类属于外部类,不属于外部类对象

特点:

        1 静态内部类的实例不会自动持有外部类的特定实例的引用,在创建内部类的实例时,不必创建外部类的实例

                外部类名.内部类名  A.B b =new A.B();

        2 静态内部类可以直接访问外部类的静态成员,如果访问外部类的实例成员,必须通过外部类的实例去访问;

        3 在静态内部类中可以定义静态成员和实例成员;

        4 测试类可以通过完整的类名直接访问静态内部类的静态成员; 

                外部类.内部类.静态成员    Outter.Inner.age

 

实例内部类

        没有使用static 修饰内部类,说明内部类属于外部类对象,不属于外部类本身

特点:

        1 创建内部类对象必须通过外部类对象创建;

                Outer.Inner inn = new Outer().new Inner();

        2 内部类自动持有外部类的实例引用,内部类可以直接访问外部类成员

        3 外部类不能直接访问内部类成员,必须通过内部类实例访问

        4 实例内部类中不能定义静态成员

        5 如果实例内部类和外部类存在同名字段或方法abc,那么在内部类中:

                abc 表示局部成员

                this.abc表示访问内部类成员

                外部类.this.abc表示外部类成员

 

局部内部类

        在方法中定义的内部类,其可见范围是当前方法和局部变量是一个级别。

特点:

        1 不能使用public private protected static修饰符

        2 局部内部类只能在当前方法中使用

        3 局部内部类和实例内部类一样,不能包含静态成员

        4 局部内部类和实例内部类,可以访问外部的所有成员

        5 局部内部类访问的是局部变量,必须使用final修饰

在JAVA8中,会自动隐式final,但是依然是常量,不能改变值

 

匿名内部类

        是一个没有名称的局部内部类,适合只使用一次的类。

特点:

        1 匿名内部类本身没有构造器,但是会使用父类的构造器

        2 匿名类尽管没有构造器,但是可以在匿名类中提供一段实例初始化代码块,JVM在调用父类构造器后,会执行该代码块

        3 内部类处理可以继承类之外,还可以实现接口

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章