基本介绍
一个类的内部又完整的嵌套了另一个内部类结构。被嵌套的类称为内部类(inner class)、嵌套其他类的类称为外部类(outer class)。是我们类的第五大成员【属性、方法、构造器、代码块、内部类】,内部类最大的特点就是可以直接访问私有属性,并且可以体现类与类之间的包含关系
基本语法
class Outer{//外部类
class Inner{//内部类
}
class Other{}//外部其他类
}
案例
public class InnerClass01 { //外部其他类
public static void main(String[] args) {
}
}
class Outer { //外部类
private int n1 = 100;//属性
public Outer(int n1) {//构造器
this.n1 = n1;
}
public void m1() {//方法
System.out.println("m1()");
}
{//代码块
System.out.println("代码块...");
}
class Inner { //内部类, 在 Outer类的内部
}
}
内部类的分类
定义在外部类局部位置上:
1、局部内部类(有类名)
2、匿名内部类(没有类名)
定义在外部类的成员位置上:
1、成员内部类(没用static修饰)
2、静态内部类(使用static修饰)
局部内部类的使用
1、可以直接访问外部类的所有成员,包含私有
2、不能添加访问修饰符,因为它的地位就是一个局部变量,局部变量是不能使用修饰符的。但可以使用fianl修饰,因为局部变量可以使用final
3、作用域:仅仅在定义它的方法或者代码块中
4、局部类---访问----外部类的成员 [访问方式:直接访问]
5、外部类---访问----局部类的成员[访问方式:创建对象,在访问,必须在作用域内]
6、外部其它类---不能访问-----局部内部类(因为局部内部类地位是一个局部变量)
7、如果外部类和局部内部类的成员重名是,默认遵循就近原则,如果想访问外部类的成员,则使用(外部类名.this.成员)去访问
举例
public class LocalInnerClass {
public static void main(String[] args) {
Outer02 outer02 = new Outer02();
outer02.m1();
System.out.println("outer02 的 hashcode=" + outer02);
}
}
class Outer02 {//外部类
private int n1 = 100;
private void m2() {
System.out.println("Outer02 m2()");
}//私有方法
public void m1(){//方法
final class Inner02 {//局部内部类(本质仍然是一个类)
private int n1 = 800;
public void f1() {
System.out.println("n1=" + n1 + " 外部类的 n1=" + Outer02.this.n1);
System.out.println("Outer02.this hashcode=" + Outer02.this);
m2();
}
}
Inner02 inner02 = new Inner02();
inner02.f1();
}
}