定义在外部类局部位置的上(比如方法内)
-
局部内部类(有类名)
- 可以直接访问外部类的所有成员,包含私有.
- 不能添加访问修饰符,因为局部内部类的地位就是一个局部变量.局部变量是不能使用修饰符的.但是可以使用final修饰,因为局部变量也可以使用final
- 作用域:仅仅在定义它的方法或代码块中
- 外部其他类-不能访问→局部内部类(局部内部类的地位是一个局部变量)
- 如果外部类和局部内部类的成员重名时,默认遵循就近原则,如果访问外部类的成员可以使用(
外部类名.this.成员
)来进行访问.System.out.println("外部类的n2="+外部类名.this.n2);
- 当局部内部类—访问—>外部类的成员[访问方式:直接访问]
- 当外部类—访问—局部内部类的成员[访问方式:创建对象,在访问(注意:必须在作用域中]
- 记住:
- 局部内部类定义在方法中/代码块
- 作用域在方法体或代码块中
- 本质任然是一个类
-
匿名内部类(没有类名)
- 匿名类和局部内部类一样,可以访问外部类的所有成员。如果匿名类位于一个方法中,则匿名类只能访问方法中 final 类型的局部变量和参数。
- 匿名类中允许使用非静态代码块进行成员初始化操作
- 匿名类的非静态代码块会在父类的构造方法之后被执行
定义在外部类的成员位置上
- 成员内部类(没有static修饰)
- 成员内部类是定义在外部类的成员位置上,并且没有static修饰
- 可以直接访问外部类的所有成员,包含私有
- 可以添加任何的访问修饰符
(public,protected,默认,private)
(因为地位就是一个成员) - 作用域和其它成员一样,为整个类体
成员内部类—访问—>外部类(比如:属性)[访问方式:直接访问]
外部类—访问—>内部类(说明)[访问方式:创建对象,在访问]
外部其它类—访问—>成员内部类
- 如果外部类和内部类的成员重名时,默认遵循就近原则,如果访问外部类的成员可以使用(
外部类名.this.成员
)来进行访问.System.out.println("外部类的n2="+外部类名.this.n2);
- 成员内部类是定义在外部类的成员位置上,并且没有static修饰
- 静态内部类(使用static修饰)
- 静态内部类是定义在外部类的成员位置,并且有static修饰
- 可以直接访问外部类的所有成员,包含私有,
但是不能直接访问非静态成员
- 可以添加任何的访问修饰符
(public,protected,默认,private)
(因为地位就是一个成员) - 作用域和其它成员一样,为整个类体
静态内部类—访问—>外部类(
比如:静态属性)[访问方式:直接访问所有的静态成员]外部类—访问—>静态内部类
访问方式:创建对象在访问
- 可以直接访问外部类的所有成员,包含私有,
- 静态内部类是定义在外部类的成员位置,并且有static修饰
注:只有成员内部类才能加static变成静态内部类。