内部类
定义:在一个类的内部又定义了一个类,这个类就是内部类。
特点:
①内部类可以访问其所在类的属性(包括所在类的私有属性),内部类创建自身对象需要先创建其所在类的对象;
②可以定义内部接口,且可以定义另外一个内部类实现这个内部接口
③可以在方法体内定义一个内部类,方法体内的内部类可以完成一个基于虚方法形式的回调操作
④内部类不能定义static元素
⑤内部类可以多嵌套
public class Coder {
public int num=1;
public void Paint()
{
System.out.println("Paint");
}
public class InnerClass{
public void method()
{
Paint();
System.out.println("hello"+num);
}
}
public static void main(String [] args){
Coder.InnerClass innerClass=new Coder().new InnerClass();
innerClass.method();
}
}
静态内部类
位置:定义在成员位置上,使用static修饰。
特点:
①静态内部类如果要访问外部的成员变量或成员方法,那么必须是静态的;
②会生成两个.class文件,一个是外部类Outer.class,另一个是Outer$Inner.class
public class Coder {
public static int num=1;
public static void Paint()
{
System.out.println("Paint");
}
public static class InnerClass{
public void method()
{
Paint();
System.out.println("hello"+num);
}
}
public static void main(String [] args){
Coder.InnerClass innerClass=new Coder.InnerClass();
innerClass.method();
}
}
局部内部类
位置:在一个类的成员方法中
特点:①不能使用任何的访问修饰符
②会生成两个.class文件,一个是Outer.class,一个是IOuter$LocalInner.class
③局部内部类智能访问方法中声明的final类型的变量
匿名内部类
定义:一个继承了该类或者实现了该接口的子类匿名对象
public class Coder {
public void method(){
new Inner(){
public void info(){
System.out.println("hello");
}
}.info();
}
public static void main(String [] args){
Coder coder=new Coder();
coder.method();
}
}
interface Inner{
public void info();
}