(二)、Java静态内部类( 可以看着两个普通类的访问关系 只是静态内部类的类名需要通过 外部类.内部类 )
静态内部类有如下特点:
1. 在创建静态内部类的实例时,不需要创建外部类的实例。
2. 静态内部类中可以定义静态成员和实例成员。外部类以外的其他类需要通过完整的类名访问静态内部类中的静态成员,如果要访问静态内部类中的实例成员,则需要通过静态内部类的实例。
3. 静态内部类可以直接访问外部类的静态成员,如果要访问外部类的实例成员,则需要通过外部类的实例去访问。
4. 外部类可以通过静态内部类的类名直接访问静态内部类的静态成员,如果要访问静态内部类的实例成员,则需要通过静态内部类的实例去访问。
(三)、Java局部内部类
局部内部类是指在一个方法(或代码块)中定义的内部类。
局部内部类有如下特点:
1. 局部内部类与局部变量一样,不能使用访问控制修饰符(public、private 和 protected)和 static修饰符修饰。
2. 局部内部类只在当前方法(代码块)中有效。
3. 局部内部类中不能定义 static 成员。可以有 final static修饰的静态常量
4. 局部内部类中还可以包含内部类,但是这些内部类也不能使用访问控制修饰符(public、private 和 protected)和 static 修饰符修饰。
5. 在局部内部类中可以访问外部类的所有成员。
6. 在局部内部类中只可以访问当前方法中 final 类型的参数与变量。如果方法中的成员与外部类中的成员同名,则可以使用 OuterClassName.this.MemberName的形式访问外部类中的成员。
7. java8开始 自动为在局部内部类中被使用的变量添加final修饰符 (隐式最终)
(四)、Java匿名内部类
匿名内部类是指没有类名的内部类,必须在创建时使用 new 语句来声明类。
匿名内部类有两种实现方式:
1、继承一个类,重写其方法。
2、实现一个接口(可以是多个),实现其方法。
匿名内部类有如下特点:
1. 匿名类和局部内部类一样,可以访问外部类的所有成员。如果匿名类位于一个方法中,则匿名类只
能访问方法中 final 类型的局部变量和参数。
2. 匿名类中允许使用非静态代码块进行成员初始化操作。
3. 匿名类的非静态代码块会在父类的构造方法之后被执行。
四、枚举类型
枚举类型相当于特殊的类,经过编译之后同样产生一个class文件。枚举类型中可以定义方法(包括构造方法)、属性、静态的方法和属性、继承接口、重载覆盖等,类似于class。
枚举类型使用enum来声明类型,枚举类型的每一个枚举值(枚举属性)都是枚举类型的实例,且都是public static final类型的实例。
枚举类型的继承:
所有的枚举类型都隐含的继承自java.lang.Enum类,又因为Java是单继承的,所以一个枚举类型不能继承任何其他的类。
枚举类型因为继承了java.lang.Enum类,又因为java.lang.Enum实现了java.lang.Comparable和java.io.Serializable接口,所以枚举类型也默认实现了这两个接口。
枚举类型的构造方法:
必须是private访问权限,不能使public权限。这样就可以保证在枚举类型定义的外部无法使用new来创建枚举值。
使用构造方法(当然是带参数的构造方法)赋值,则必须给所有的枚举值赋值;如果写了构造方法,却没有使用其用于赋值,则会报错。
继承自父类(java.lang.Enum)的方法:
1. ordinal()方法: 返回枚举值在枚举类种的顺序。这个顺序根据枚举值声明的顺序而定。
2. compareTo()方法: Enum实现了java.lang.Comparable接口,因此可以比较象与指定对象的顺序。
Enum中的compareTo返回的是两个枚举值的顺序之差。当然,前提是两个枚举值必须属于同一个枚举类,否则会抛出ClassCastException()异常。
3. values()方法: 静态方法,返回一个包含全部枚举值的数组。
4. toString()方法: 返回枚举常量的名称。
5. valueOf()方法: 这个方法和toString方法是相对应的,返回带指定名称的指定枚举类型的枚举常量。
6. equals()方法: 比较两个枚举类对象的引用。
本文介绍了Java中的几种内部类,包括静态内部类的特点,如无需外部类实例即可创建,可访问外部类的静态和实例成员。局部内部类的限制,如只能在定义的方法内使用,不能有访问控制修饰符和static修饰符。匿名内部类的用法,如继承类或实现接口,并强调它们对外部类成员和final变量的访问规则。此外,还详细讲解了枚举类型的特性,如继承自Enum类,实现Comparable和Serializable接口,以及枚举值的构造和相关方法。

3万+

被折叠的 条评论
为什么被折叠?



