内部类:
一 非静态内部类
//非静态内部类 //非静态内部类可任意调用外部类的局部变量,无论是否private //在外部类中要实例化内部类:InnerClass inner = new InnerClass(); //其他类中实例化内部类:1.Test.InnerClass inner = new Test.new InnerClass(); // 2.Test t = new Test(); // t.InnerClass inner = t.new InnerClass(); // class Test{ int i = 1; class InnerClass{ public void run(){ System.out.println("outclass field = " + i); } } public void run(){ InnerClass inner = new InnerClass(); } } class RunTest{ Test t = new Test(); t.InnerClass inner = t.new InnerClass(); //或者 Test.InnerClass inner = new Test.new InnerClass(); }
二 局部内部类
/** * 局部内部类 * 1.局部内部类和局部变量作用相同,只在局部范围有效 * 2.局部内部类中可以直接调用外部类的成员变量 * 3.外部类创建局部内部类对象InClass inClass = new InClass(); * * **/ public class OutClass { int i = 8; public void run(){ class InClass{ public void run(){ System.out.println("run field i = " + i); } } InClass inClass = new InClass(); inClass.run(); } }
三 静态内部类
/** * 静态内部类 * 1.静态内部类也可正常访问外部类成员变量 * 2.外部类实例化内部类InClass inClass = new InClass(); * * **/ public class OutClass { static int t = 6; static class InClass{ int i = 5; int j = t; } public void run(){ InClass inClass = new InClass(); System.out.println(inClass.i); } }
四 匿名内部类
标准创建方式
new anonymous{ };
使用
/** * 匿名内部类 * **/ public class InnerClass4 { public static void main(String[] args) { Thread t = new Thread(){ public void run(){ for(int i = 1 ; i < 6 ; i++){ System.out.println(i + " Ÿ "); } } }; t.start(); Runnable r = new Runnable(){ public void run(){ for(int i = 6 ; i < 11 ; i++){ System.out.println(i + " U "); } } }; Thread t1 = new Thread(r); t1.start(); } }