内部类

来源:互联网 发布:交大医学院网络教育 编辑:程序博客网 时间:2024/04/24 08:40
  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. 隐藏实现,避免方法外实例化.
0 0
原创粉丝点击