styleyan/javaNote

内部类分类以及调用方式和作用

Opened this issue · 3 comments

成员内部类

  • 内部类在外部使用时,无法直接实例化,需要借由外部类信息才能完成实例化
  • 内部类的访问修饰符,可以任意,但是访问范围会受到影响
  • 内部类可以直接访问外部类的成员;如果出现同名属性,优先访问内部类中定义的
  • 可以使用【外部类.this.成员】的方式,访问外部类中同名的信息
  • 外部类访问内部类信息,需要通过内部类实例,无法直接访问
  • 内部类编译后.class文件名: 【外部类$内部类.class】

静态内部类

  • 静态内部类中,只能直接访问外部类的静态成员,如果需要调用非静态成员,可以通过对象实例
  • 静态内部类对象实例时,可以不依赖于外部类对象
  • 可以通过【外部类.内部类.静态成员】的方式,访问内部类中的静态成员
  • 当内部类属性与外部类属性同名时,默认直接调用内部类中的成员;如果需要访问外部类中的静态属性,则可以通过【外部类.属性】的方式;如果需要访问外部类中的非静态属性,则可以通过【new 外部类().属性】的方式;

方法内部类

  • 定义在外部类方法中的内部类,也称局部内部类。
  • 方法内部类编译后.class文件名: 【外部类$1方法内部类.class】

匿名内部类

  • 匿名内部类没有类型名称、实例对象名称
  • 编译后的文件命名:外部类$数字.class
  • 无法使用private、public、protected、abstract、static修饰
  • 无法编写构造方法,可以添加构造代码块
  • 不能出现静态成员
  • 匿名内部类可以实现接口也可以继承父类,但是不可兼得