静态内部类
public class External {
private static int shared = 100;
public static class StaticInner {
public void innerMethod() {
System.out.println("inner -> shared: " + shared);
}
}
public void test() {
StaticInner staticInner = new StaticInner();
staticInner.innerMethod();
}
public static void main(String[] args) {
External external = new External();
external.test();
}
}
成员内部类
public class External {
private static int shared = 100;
public class Inner {
public void innerMethod() {
System.out.println("inner -> shared: " + shared);
// 可以通过 "类名.this.方法名" 调用,也可以直接通过方法名调用
// External.this.action();
action();
}
}
private void action() {
System.out.println("external -> action()");
}
public void test() {
Inner inner = new Inner();
inner.innerMethod();
}
public static void main(String[] args) {
External external = new External();
external.action();
external.test();
// 成员内部类是把类当做一个属性,所以成员内部类总是与外部相关联的。
// 在外部使用时,它不能直接通过 "new External.Inner()" 的方法创建。
// 必须先实例化一个外部类,通过 "外部类.new" 的方法实例化
External.Inner inner = external.new Inner();
inner.innerMethod();
}
}
方法内部类
public class External {
private int shared = 100;
private static String S = "S";
public void test(final int param) {
final String s = "s";
// 方法内部类定义在外部类的方法中。
// 方法内部类只可以在定义的方法中被使用。
class Inner {
public void innerMethod() {
// 方法内部类可以访问外部类的静态、非静态的方法和属性。
// 假如该方法是静态方法,则只能访问外部类的静态变量和方法
System.out.println("External -> shared: " + shared);
System.out.println("External -> S: " + S);
// 方法内部类还可以访问方法内中的局部变量,但是这些变量必须是 final 修饰的。
System.out.println("External -> s: " + s);
System.out.println("External -> param: " + param);
}
}
Inner inner = new Inner();
inner.innerMethod();
}
public static void main(String[] args) {
External external = new External();
external.test(200);
}
}