1. 动态内部类
/**
* Created by dly on 2018/8/29
*/
public class InnerClassTest {
private int a;
private void aplusOne() {
a+= 1;
}
public InnerClassTest(int a) {
this.a = a;
}
class InnerClass {
private int b;
InnerClass(int b) {
this.b = b;
}
public int getA() {
aplusOne(); //访问外部类的私有方法
return a; //访问外部类的私有变量
}
}
public static void main(String[] args) {
InnerClass innerClass = new InnerClassTest(0).new InnerClass(0);
System.out.println(innerClass.getA());
}
}
动态的内部类可以访问外部类的所有成员变量和成员方法。
2. 静态内部类
/**
* Created by dly on 2018/8/29
*/
public class InnerClassTest {
private int a;
private void aplusOne() {
a+= 1;
}
public InnerClassTest(int a) {
this.a = a;
}
static class InnerClass {
private int b;
InnerClass(int b) {
this.b = b;
}
public static int getA() {
aplusOne(); //无法访问
return a; //无法访问
}
}
}
静态内部类无法访问动态外部类的非静态成员变量和成员方法
3 静态内部类在单例模式中的使用
/**
* Created by dly on 2018/8/27
*/
public class Singleton {
private Singleton() {
}
private static class SingletonHolder {
private final static Singleton instance = new Singleton();
}
public static Singleton getInstance() {
return SingletonHolder.instance;
}
public static void main(String[] args) {
Singleton singletonOne = Singleton.getInstance();
Singleton singletonTwo = Singleton.getInstance();
System.out.println(singletonOne);
System.out.println(singletonTwo);
}
}
运行结果
com.whut.testsort.designParttern.Singleton@28d93b30
com.whut.testsort.designParttern.Singleton@28d93b30
可以看出得到的同一个对象