Java:面向对象:内部类:静态内部类与非静态内部类的比较
1.创建实例对象是否需要外部类的实例对象
静态内部类类的创建类似静态方法,只需外部类.静态内部类,不需要外部类的实例对象
Outter.Inner inner = new Outter.Inner();
非静态内部类类似调用实例方法,需要外部类的实例对象
Outter outter = new Outter();
Outter.Inner inner = outter.new Inner();
2.是否能够调用外部类的成员和方法
静态内部类不能调用外部类的非静态成员和方法
非静态内部类可以调用外部类的所有成员和方法(包括priviate)
3.是否可以有静态域和静态方法
静态内部类可以
非静态内部类不可以
4.其他类继承是否需要在构造方法中调用外部类实例对象的构造方法
静态内部类不需要
非静态内部类需要
5.是否可以嵌套静态内部类
静态内部类只可以嵌套静态内部类
非静态内部类只可以嵌套普通内部类
总结
静态内部类和静态方法
静态内部类定义时不能调用外部类的实例成员和实例方法,创建实例对象时不需要外部类的实例对象
静态方法定义时不能调用所在类的实例成员和实例方法,调用时不需要所在类的实例对象
非静态内部类和实例方法
非静态内部类定义时能调用外部类的所有成员和方法(包括private),创建实例对象时需要外部类的实例对象
实例方法定义时能调用所在类的所有成员和方法,调用时需要使用所在类的实例对象