Java中的内部类(四种)
内部类分类
// OutClass 是外部类
public class OutClass {
// 成员位置定义:未被static修饰 --->实例内部类
public class InnerClass1{
}
// 成员位置定义:被static修饰 ---> 静态内部类
static class InnerClass2{
}
public void method(){
// 方法中也可以定义内部类 ---> 局部内部类:几乎不用
class InnerClass5{
}
}
}
实例内部类
即未被static修饰的成员内部类。
为了更好的掌握实例内部类,我们从几个问题入手进行思考:
-
实例内部类当中,能不能定义静态的成员变量?
答: 理论上不能被定义的,但如果非要定义需要加 final 修饰把它变为常量
-
实例内部类当中,能不能定义静态的成员方法?
答: 不能!!!成员内部类必须先实例化外部类对象然后再实例化成员内部类.非static的内部类,在外部类加载的时候,并不会加载它,所以它里面不能有静态变量或者静态方法。
1、static类型的属性和方法,在类加载的时候就会存在于内存中。2、要使用某个类的static属性或者方法,那么这个类必须要加载到
jvm
中。所以,由上得出静态成员和静态方法是随着类的加载而存在的,也就是说内部类的静态属性是随着类的加载的,但是内部类的实例 是创建后才存在的,也就是说其静态属性优先存在于他的类实例的存在 这显然是矛盾的
-
如何实例化一个实例内部类?
实例内部类对象必须在先有外部类对象前提下才能创建.
答: 外部类类名.内部类 变量 = 外部类引用 . new 内部类()
举例:
//方法1: 简写方式 OuterClass.InnerClass innerClass1 = new OuterClass().new InnerClass(); //方法2: OuterClass outerClass = new OuterClass(); OuterClass.InnerClass innerClass = outerClass.new InnerClass()