定义:写在一个类里面的类就是内部类
使用场景:
- B类表示A类的事物是A类的一部分,且B单独存在没有意义
- 内部类表示的事物是外部类的一部分
- 内部类单独出现没有任何意义
- 内部类可以直接访问外部类的成员,包括私有
- 外部类要访问内部类的成员,必须创建对象
成员内部类
什么是成员内部类?
- 写在成员位置的,属于外部类的成员
成员内部类的格式?
- 成员内部类写在成员位置,属于外部类的成员
- 成员内部类可以被一些修饰符所修饰,比如private、缺省、protected、public、static等
- JDK16之后,成员内部类里面可以定义静态变量
如何创建成员内类的对象?
- 在外部类中编写方法,对外提供外部类的对象
- 用private修饰内部类时一般用此方法
- 直接创建格式:
Outer.Inner oi = new Outer().new Inner();
成员内部类如何获取外部类的成员变量?
outer.this.变量名
静态内部类
什么是静态内部类?
- 用static修饰的成员内部类的一种
如何创建静态内部类对象?
Outer.Inner oi = new Outer.Inner();
静态内部类方法的调用?
- 非静态方法:先创建对象,用对象调用
- 静态方法:
Outer.Inner.method();
局部内部类
- 将内部类定义在方法里面就叫做局部内部类,类似于方法里面的局部变量
- 外界是无法直接使用,需要在方法内部创建对象并调用
- 该类可以直接访问外部类的成员,也可以访问方法内的局部变量
匿名内部类
什么是匿名内部类?
- 隐藏了名字的内部类(外部类名$序号),可以写在成员位置,也可以写在局部位置
匿名内部类的格式?
new 类名或者接口名() { @Override 重写方法; };
格式的细节?
- 包含了继承或实现,方法重写,创建对象
- 整体就是一个类的子类对象或者接口的实现类对象对象
使用场景?
- 当方法的参数是接口或者类时
- 以接口为例,可以传递这个接口的实现类对象
- 如果实现类只要使用一次,就可以用匿名内部类简化代码
没有评论:
发表评论