JAVA 内部类
一、静态内部类:
1.访问内部静态类时,不需要实例化外部类。
public class Outer { static class Inner { } } class OtherClass { Outer.Inner oi = new Outer.Inner(); }
2.静态内部类中可以定义静态成员和实例成员。(变量、方法)
注:外部类以外的其他类需要通过完整的类名访问静态内部类中的静态成员,如果要访问静态内部类中的实例成员,则需要通过静态内部类的实例。
public class Outer { static class Inner { int a = 0; // 实例变量a static int b = 0; // 静态变量 b } } class OtherClass { Outer.Inner oi = new Outer.Inner(); int a2 = oi.a; // 访问实例成员,通过静态内部类的实例访问 int b2 = Outer.Inner.b; // 访问静态成员,以完整类名访问 }
3.静态内部类可以直接访问外部类的静态成员,如果要访问外部类的实例成员,则需要通过外部类的实例去访问。
public class Outer { int a = 0; // 实例变量 static int b = 0; // 静态变量 static class Inner { Outer o = new Outer; int a2 = o.a; // 访问实例变量,通过实例访问 int b2 = b; // 访问静态变量,直接访问 } }
二、非静态内部类(内部实例类)
(1)外部类的静态方法+外部类以外的类访问内部实例类需要从外部类依次实例化。(如Outer.Inner i = new Outer().new Inner())。
(2)内部实例类可以任意访问外部类的所有成员。(包括嵌套类)
(3)在外部类中不能直接访问内部类的成员,而必须通过内部类的实例去访问。如果类 A 包含内部类 B,类 B 中包含内部类 C,则在类 A 中不能直接访问类 C,而应该通过类 B 的实例去访问类 C。
(4)在实例内部类中不能定义 static 成员。