一、静态内部类
package com.chunlei.demo;
public class StaticInnerClass {
public static void main(String [] args) {
Outer.Inner inner = new Outer.Inner();
inner.print();
}
}
class Outer {
static String str = "hello world";
static class Inner {
public void print() {
System.out.println("static inner class");
System.out.println(str);
}
}
}
实例化静态内部类 Outer.inner = new Outer.inner();是一个独立的class文件,只能访问外部类的静态成员。
二、成员内部类
package com.chunlei.demo;
public class InnerClass {
public static void main(String [] args) {
Outer.Inner inner = new Outer().new Inner();
Inner.print();
}
}
class Outter {
class Inner {
public void print() {
System.out.println("inner class");
}
}
}
实例化成员内部类 Outter.inner = new Outter().new inner();成员内部类访问外部类的成员变量时用Outter.this.成员变量,成员内部类可访问外部类的一切。成员内部类可在方法中定义,相当于局部变量。
三、局部内部类
package com.chunlei.demo;
public class InnerClass {
public static void main(String [] args) {
Outer outer = new Outer();
outer.test();
}
}
class Outer {
public void test() {
class Inner {
String final str = "hello world!";
public void print() {
System.out.println("method inner class");
System.out.println(str);
}
}
new Inner().print();
}
}
同局部变量,局部变量不可加访问修饰符,所以局部内部类也一样。局部内部类只能访问final类型的局部变量
四、匿名内部内
package com.chunlei.demo;
public class InnerClass {
public static void main(String [] args) {
Outter outter = new Outter();
outter.test();
}
}
class Outter {
Thread thread = new Thread() {
@Override
public void run() {
System.out.println("hello world!");
}
};
Thread thread2 = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("hello world!");
}
});
public void test() {
thread.start();
thread2.start();
}
}
匿名内部类,最为常用,最大的特点是隐式的继承父类或实现接口,上面的代码在android编程中经常看到。