内部类

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值