课程名称:Java工程师2022版
课程章节:Java多态(下)
课程内容:
Java内部类、成员内部类、静态内部类、方法内部类、匿名内部类
课程收获:
可以将一个类定义在另一个类里面或者一个方法里面这样的类称为内部类,与之对应,包含内部类的类被称为外部类
内部类隐藏在外部类之内,更好的实现了信息隐藏
成员内部类(普通内部类):
1、内部类在外部使用时,无法直接实例化,需要借由外部类信息才能完成实例化
2、内部类的访问修饰符,可以任意,但是访问范围会受到影响
3、内部类可以直接访问外部类的成员,如果出现同名属性,优先访问内部类中定义的
4、可以使用外部类.this.成员方式,访问外部类中的同名的信息
5、外部内访问内部类信息,需要通过内部类实例,无法直接 访问
6、内部类编绎后.class文件命 名:外部类$内部类.class
静态内部类:
1、静态内部类中,只能访问外部类的静态成员,如果需要调用非静态成员,可以通过对像实例。(静态类内不能this)
2、静态成员内部类对象实例时,可以不依赖于外部类对象
3、可以通过外部类.内部类.静态成员的方式,访问内部类中的静态成员;
4、当内部类属性与外部类属性同名时,默认直接调用内部类中的成员;
方法内部类:
定义在外部类方法中的内部类,也称局部内部类
1、定义在方法内部,作用范围也在方法内
2、和方法内部成员使用规则一样,class前面不可以添加public、protected、static
3、类中不能包含静态成员
4、类中可以包含final、abstract修饰的成员
匿名内部类:
由于抽象类和接口不允许实例化,可以直接用“new 类名(){重写read方法}”这种匿名内部类的格式获得实例对象的同时完成对象内容的编写,其没有对象实例名 ,将类的定义与类的创建放到了一起。
1、匿名内部类没有类型名称、实例对象名称
2、编译后的文件命名: 外部类$数字.class
3、无法在类前使用private、public、protected、abstract、static修饰
4、无法编写构造方法,可以添加构造代码块
5、不能出现静态成员与抽象方法
6、匿名内部类可以实现接口也可以继承父类,但是不可兼得