- 内部类
- 定义: 一个类可以定义在一个类的内部, 定义在类内部的类称之为Inner, 其所在类的称为Outer
- 成员内部类
- 会生成两个类 --> Outer.class, Outher$Inner.class
- 实例化
- 除了在外部类中实例化外, 还可以在外部类的外部实例化: Outer.Inner in = new Outer().new Inner();(不建议)
- 内部类的访问, 通过"外部类.内部类"的形式表示
- 作用域: 与成员变量规则一致
- 作用: 可以方便的使用外部类的私有数据, 并具有相对独立性, 用于在类内部封装相对独立功能, 但要依赖外部类的对象.
- 实现隐藏
- 拥有访问外部类的所有权限
- 实现多重继承
- 缺点: 内部类打破类的常规定义(类是由属性和方法组成)
- 扩展:
- 内部不能定义静态成员, 静态内部类没有限制
- 通常只服务于Outer, 对外不具备可见性, 建议为private
- 一般情况下, Inner对象会在Outer对象中创建(构造方法或其它方法)
- Inner对象中会有一个隐式的引用指向创建它的Outer类对象
- 可以在外部类中, 对外提供操作内部类的方法
- 静态内部类
- 在类中定义, 修饰符为static, Outher$Inner.class
- 局部内部类(方法内部类)
- 在方法中定义的类
- 局部匿名内部类
- 如果在一段程序中需要创建一个类的对象(通常这个类需要实现某个接口或者继承某个类), 而且对象创建后, 这个类的价值也就不存在了, 那么这个类可以不需要命名, 称之为匿名内部类
- 内部类中如果有扩展的公开方法,内部类外 不可能调用到
- 总结:
- 局部内部类/局部匿名内部类中访问局部变量/参数, 不能改变其值, 只读. 若更改值编译不会通过, 通常为final
- 不能有任意修饰符, 只能在方法内部实例化对象
- 编译后名称为Outer$nInner()
- 隐藏实现, 避免方法外实例化.
内部类
最新推荐文章于 2024-11-03 12:23:39 发布