一:实例内部类
class OuterClass {
public int data1 = 1;
private int data2 = 2;
public static int data3 = 3;
public void func() {
System.out.println("OuterClass::func()");
}
*//**
* 实例内部类:
* 可以把实例内部类 当做就是一个实例成员
*//*
class InnerClass {
public int data1 = 1000;
public int data4 = 4;
private int data5 = 5;
//public static int data6 = 6; //
public static final int data6 = 6;
public void funcInner() {
System.out.println("InnerClass::funcInner");
System.out.println(this.data1);
System.out.println(data2);
System.out.println(data3);
System.out.println(OuterClass.this.data1);
}
}
}
- 不能定义静态的成员变量。原因:静态的成员变量不依赖于对象。如果非要定义,可以定义为static final ,也就是说只要是编译期间能确定的值就可以。
- 如何在其他类拿到一个实例内部类的对象。
外部类.内部类 变量名 = 外部类对象的引用.new 内部类();
OuterClass outerClass = new OuterClass();
OuterClass.InnerClass innerClass = outerClass.new InnerClass();
- 实例内部类当中如何访问外部类同名的成员变量。
内部类中国包含了两个this,一个是自己的this,一个是外部类的this。
System.out.println(OuterClass.this.data1);
二:静态内部类
/**
* 静态内部类:
* 可以把静态内部类 当做就是一个静态成员
*/
static class InnerClass {
public int data1 = 1000;
public int data4 = 4;
private int data5 = 5;
public static int data6 = 6; //
public OuterClass out;
public InnerClass(OuterClass o) {
this.out = o;
}
public void funcInner() {
System.out.println(data1);
System.out.println(this.out.data2);
}
}
- 如何拿到静态内部类的对象
OuterClass.InnerClass innerClass = new outerClass.nnerClass();
- 静态内部类当中,不能访问外部类的非静态的数据成员。
三:匿名内部类
PriorityQueue<Integer> priorityQueue = new PriorityQueue<>(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return 0;
}
});
变量的捕获:一定是在程序运行的过程中,当中没有发生改变的量。