Java中定义一个类是很常见的,但是如何去定义内部类以及内部类定义或者使用其内部类的成员还是挺复杂的,下面总结一下内部类的定义以及注意事项。
内部类分为四种,分别是
实例内部类、静态内部类、匿名内部类、局部内部类。
实例内部类
实例内部类是在一个类中直接通过class 类名 来定义,跟外部类的定义方式一样,只不过这次是在类里面定义:
注意事项:
1:在father类里面,son类的地位与int a 和 String b的地位一样,都是普通成员变量。
2:在father类里面想要用son类里面的变量b和c,必须先实例化内部类son 才可以通过实例化后的对象取得内部类的成员变量。
3:在son类里面想要用father类里面的成员变量,可以直接使用,但是如果father类里面 的变量和son类里面的变量同名,打印同名变量的时候,结果是内部类的变量。要想在内部类里面访问到外部类同名的成员变量则要通过father.this.变量名来获取。
4:在main方法里面获取一个内部类,需要先实例化外部类对象,通过外部类对象来实例化内部类对象获取内部类成员或者方法。
如何在main方法里面实例化内部类:
如何在内部类里面访问与外部类同名的变量:
静态内部类
静态内部类的定义和实例内部类类似,都是在一个类里面定义类,唯一有一点不同的是,静态内部类的定义需要加关键字static,定义方式为 static class 类名。
注意事项:
1:father类里面,son类的地位就像father类里面的静态成员变量,不需要外部类实例化来获取内部类,就如father类里面的静态方法不需要实例化father对象来获取其静态方法。
2:在father类里面想要获取内部类的成员变量,不需要实例化内部类对象,而是通过内部类类名.方法/成员变量就可以获取。
3:在main方法里面想要获取内部类的对象,不需要像实例内部类一样需要先实例化外部类对象,而是直接通过外部类类名.内部类来实例化。
4:在内部类里面想要获取外部类对象的成员变量,只能获取到外部类静态成员变量或者方法,但是想要获取外部类的非静态成员变量和方法,需要在静态内部类里面实例化外部类的对象来获取。
如何获取外部类的非静态类方法/成员变量:
如何在main方法里面实例化静态内部类对象:
局部内部类
局部内部类的定义和以上两者有点不同,其定义位置在类的方法里面定义
一般不怎么用,因为该内部类只在该方法内部作用,作用范围十分的小。
匿名内部类
匿名内部类,顾名思义,就是没有名字的类,有和多种定义方式,但是都是没有名字的,前提是需要定义的该匿名内部类是已经存在的类,可以是自己定义的也可以是Java自带的,下面是一些定义方式: