首先内部类分为4种
定义在外部类的方法中的局部位置上
1.局部内部类
2.匿名内部类
定义在外部类的成员位置上
1.成员内部类
2.静态内部类
上面的两种虽然是类,基本上满足类的语法。但是它同时地位等同于局部变量,因为定义在方法中的局部位置。所以它不可以使用访问修饰符(其实也就是public),像是你不能在一个函数里,定义一个局部的public int变量。
也不能使用static,因为static是用在外部类的方法和属性上的。既然局部类地位等同于局部变量了,那这个类不能是static的,同时类里的成员(属性和方法)也就更不能是static了,它们只能用final(因为它的地位是局部变量,局部变量也能用final)和abstract(因为它同时仍然是个类)修饰。
而以下两种 成员位置的类 可以使用static关键字,听起来很奇怪,不是static只能修饰方法和属性吗?但是此时的类正是处于外部类的属性位置上的,它不同于前两种处于外部类的方法中的局部变量的位置。所以其实是这么理解的,static只能用在地位是属性和方法的地方,不能用在地位是局部变量的地方。