Inner class & Anonymous (inner) class
内部类:在一个类中定义另一个类。
1.通过内部类,一个类可以使用另一个类。内部类的外部类的成员变量在内部类中仍然有效。
2.不论是静态还是非静态的,内部类中的方法也可以调用外部类中的方法。内部类的类体中不可以声明类变量和类方法。
3.外部类可以在函数中创建的内部类对象。
4.如果内部类的权限是非私有、非静态的,可以通过创建外部类对象访问。Outer.Inner oi=new Outer().new Inner();oi.use();
5.如果内部类是静态的,非私有的,可以用类名调用静态成员。
6.静态的内部类的生命周期跟普通的static无差异。
7.局部内部类不能访所在局部的局部变量。若需访问,加final修饰变量。(jdk1.8自动添加final)。
8.使用内部类简化书写。
匿名类:即无类名内部类。
其有两种实现方式:继承一个类,重写其方法。实现一个或多个接口,实现其方法。
Outer ot = new Outer(){
void show(){
System.out.println("run in Inner");
}
}
1.无名不能引用,不能实例化,不能有构造器,只用一次。它是利用父类的构造函数和自身类体构造成一个类(没有extends和implements关键字
是因为匿名内部类无类名,则也无关键字。继承或者实现关系由jvm负责)。
2.匿名类可以继承父类的方法,也可以重写父类的方法。
3.匿名类可以访问外部类的成员变量和方法,匿名类的类体不可以声明成static成员变量和方法。
4.匿名类是一个创建的结果,可以赋值给一个父类对象。因此可以分为两种匿名类,成员匿名类和局部匿名类(作为函数参数)。
5.匿名类中允许使用非静态代码块进行成员初始化操作。
本文来自博客园,作者:z_s_s,转载请注明原文链接:https://www.cnblogs.com/zhoushusheng/p/15870916.html
浙公网安备 33010602011771号