java中的内部类

  1. 静态内部类
  2. 成员内部类
  3. 方法内部类
  4. 匿名内部类

1.静态内部类

    class Outer {

    	private static String outer = "outer";

    	/**
* 静态内部类只能访问外部类的静态成员
*/
public static class StaticInner {
public void show() {
System.out.println(outer);
}
} public void test() {
StaticInner si = new StaticInner();
si.show();
}
} class Other { public static void main(String[] args) {
/**
* 静态public内部类的创建对象的方式
*/
Outer.StaticInner si = new Outer.StaticInner();
si.show();
}
}

2.成员内部类

    class Outer {
private static String outerStatic = "outer";
private int outerNum = 666; /**
* 成员内部类可以访问外部类的所有成员
*/
public class Inner {
/**
* 成员内部类中不可以定义静态变量和方法,只能定义常量。这样的原因可能是直接在外部类中其实就可以定义这些静态属性
*/
private static final int innerNum = 233333; public void show() {
System.out.println(outerStatic);
System.out.println(outerNum);
System.out.println(innerNum);
/**
* 同名时调用的当前类的test方法
*/
test();
/**
* 访问外部类的方法
*/
Outer.this.test();
} public void test() {
System.out.println("inner test method");
}
} public void test() {
// Inner inner = new Inner();
// inner.show();
System.out.println("outer test method");
}
} class Other { public static void main(String[] args) {
/**
* 成员内部类的创建对象的方式
*/
Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();
inner.show();
}
}

3.方法内部类

    class Outer {
private int a = 100; public void test(final int param){
/**
* 访问方法局部成员,该成员需为final
*/
final String str = "hello";
class Inner {
public void innerMethod(){
System.out.println("outer a " +a);
System.out.println("param " +param);
System.out.println("local var " +str);
}
}
Inner inner = new Inner();
inner.innerMethod();
}
}

4.匿名内部类

    class AnonymousClass {
public static void main(String[] args) {
List<Person> list = new ArrayList<Person>();
Collections.sort(list, new Comparator<Person>() { @Override
public int compare(Person o1, Person o2) {
return o1.getName().compareTo(o2.getName());
} });
} class Person { private String name; public Person(String name) {
this.name = name;
} public String getName() {
return this.name;
}
}
}

参考资料

05-11 20:23