分类
-
成员内部类
-
局部内部类
-
匿名内部类
-
静态内部类
成员内部类
常见形式:
public class external(){ public class inside(){ //这是一个内部类 } }
特点:
-
解决java没有多继承问题(内部类继承一个父类,外部类继承一个父类,变相的多继承)
-
成员内部类可以直接使用外部类的属性、方法(包括私有的)
-
当外部要实例内部类时,注意内部类的访问修饰符
-
当外部类与内部类的属性名或者方法同名时,内部的属性方法通过this.调用,外部的属性方法通过外部类名.this.调用
局部内部类
常见形式:
public class external(){ public void method(){ class local(){ //这是一个局部内部类 } } }
特点:
-
无访问修饰符
-
局部内部类或者匿名内部类。如果要使用外部类的局部变量(包括形参,全局变量不包括)
那么这个局部变量必须是final修饰的,及为常量
JDK1.8之前必须声明final,JDK1.8之后编译时自动添加final
(方法调用完会销毁,而局部内部类不会马上销毁,这是,如果调用的不是常量会出现异议)
-
局部内部类也会生成.class文件
静态内部类
常见形式:
public class external(){ public static class inside(){ //这是一个静态内部类 } }
特点:
-
不可访问外部类中非静态的属性方法
-
静态内部类在外部中无法实例化
-
调用:
外部类调用:外部类名.内部类名.静态方法名()
外部调用:外部类的对象.内部类名.静态方法名()
-
注意static与class的位置关系,如果书写为 class static会编译报错
匿名内部类】
常见形式:
//Anonymous是一个抽象类 , abstract_method是Anonymous中的一个抽象方法 public abstract class Anonymous(){ public abstract void abstract_method(); } //External是一个类 , method是External中的方法,参数的类型是anonymous public class External(){ public void method(Anonymous anonymous){ } } } //要生成一个实现abstract_method方法的匿名内部类 public class Test(){ public static void main(String[] args){ External external = new External(); external.method(new Anonymous(){ //这是一个匿名内部类 public void abstract_method(){} }); } }
-
使用方便
-