一.成员内部类
成员内部类是定义在外部类的成员位置,没有static修饰
- 可以直接访问外部类的所有成员,包含私有的
- 可以添加任何访问修饰符,因为成员内部类就是一个成员
- 作用域:整个整体,要在外部类的成员方法中创建成员内部类对象,再调用方法
- 成员内部类---访问-->外部类成员(比如属性)【访问方式:直接访问】
- 外部类---访问--->成员内部类(说明)访问方式:创建对象,再访问
- 外部其他类--访问--->成员内部类
- 外部类和成员内部类的成员重名时,成员内部类访问时,遵循就近原则。如果硬是想访问外部类,使用(外部类.this.成员)去访问
二.静态内部类
是定义在外部类的成员位置,有static修饰
- 可以直接访问外部类的所有静态成员,包含私有的,但不能直接访问非静态成员
- 可以添加任何访问修饰符,因为成员内部类就是一个成员
- 作用域:整个整体
- 静态内部类---访问-->外部类成员(比如静态属性)【访问方式:直接访问所有静态成员】
- 外部类---访问--->静态内部类(说明)访问方式:创建对象,再访问
- 外部其他类--访问--->静态内部类
- 外部类和静态内部类的成员重名时,静态内部类访问时,遵循就近原则。如果硬是想访问外部类,使用(外部类.this.成员)去访问
三.枚举
实现方式
自定义类实现枚举 使用enum关键字实现
自定义类实现
不需要提供setxx方法,因为枚举对象值通常为只读 对枚举对象/属性使用final+static共同修饰,实现底层优化 枚举对象名通常使用全部大写,常量的命名规范 枚举对象根据需要,也可以有多个属性
自定义类特点
- 构造器私有化
- 本类内部创建一组对象[四个 春夏秋冬]
- 对外暴露对象(通过为对象添加 public final static 修饰符)
- 可以提供 get 方法,但是不要提供set
enum常用方法
- toString:Enum类已经重写过了,返回的是当前对象名,子类可以重写该方法,用于返回对象的属性信息
- name:返回当前对象名(常量名),子类中不能重写
- ordinarl:返回当前对象的位置号,默认从0开始
- values:返回当前枚举中所有的常量
- valueOf:将字符串转换成枚举对象,要求字符串必须为已有的常量名,否则报异常!
- compareTo:比较两个枚举常量,比较的就是编号
注意 枚举类和普通类一样,可以实现接口,但不能继承类