class Outter {
private Inner inner = null;
public Outter() {
}
public Inner getInnerInstance() { //其他类获取内部类的方法
if(inner == null)
inner = new Inner();
return inner;
}
class Inner { //普通内部类
public Inner() {
}
}
static class Inter { //静态内部类
}
public static void main(String[] args) {
//在内部类所在的外部类中,可以直接创建对象,不需要外部类(静态内部类在加载时已经存在)
Inter inter = new Inter();
Outter.Inter i = new Outter.Inter(); //这样也可以
Outter outter = new Outter();
Inner inner = outter.new Inner(); //非静态内部类的创建始终需要外部类对象
}
}
public class Test {
public static void main(String[] args) {
//创建普通内部类的对象方法一(直接通过外部类对象创建内部类)
Outter outter = new Outter();
Outter.Inner inner = outter.new Inner();
//创建普通内部类的对象方法二(通过外部类方法获取内部类对象)
Outter.Inner inner1 = outter.getInnerInstance();
//静态内部类的创建(在内部类所在的外部类中创建静态内部类的对象可以不需要外部类对象)
//但如果在其他类中创建静态内部类的对象的话,就要参考以下方法
Outter.Inter i = new Outter.Inter();
}
}
以上就是普通内部类和静内部类的创建对象方法。可以看出非静态内部类对象的创建,始终需要先创建所在外部类的对象。而非静态内部类对象的创建,在所在的外部类中则可以不创建该外部类对象。
要区别于
//普通内部类需要外部类对象创建好了,才能访问到内部类
Outter outter = new Outter();
Outter.Inner inner = outter.new Inner();
//静态内部类在该类加载时就可以访问了
Outter.Inter i = new Outter.Inter();
内部类在开发中用的很多,常用于GUI界面监听器的绑定,因为作为内部类的监听器类,可以访问界面的所有成员组件(包括private的组件)。