Java中的四种内部类,我们可以想象成一个家庭里的不同成员,每个成员都有其特殊的角色:
-
成员内部类(Member Inner Class) - 就像家里的孩子,它们属于家庭(类),并且可以在家里(类)的任何地方出现。它们可以访问家里的所有资源,包括私有的。
// 外部类 public class OuterClass {private String secret = "I am a secret!";// 成员内部类public class InnerClass {// 成员内部类可以访问外部类的私有成员public void revealSecret() {System.out.println("The secret is: " + secret);}}// 测试方法public void testInner() {InnerClass inner = new InnerClass();inner.revealSecret();} }
-
静态内部类(Static Nested Class) - 类似于家庭中的宠物,虽然它们也是家的一部分,但它们不直接依赖于家庭成员(外部类实例)。宠物有自己的空间,不需要与主人共享一切。
// 外部类 public class OuterClass {// 静态内部类public static class StaticNestedClass {// 静态内部类可以拥有静态成员public static String sharedInfo = "I am shared info!";}// 测试方法public void testStaticInner() {StaticNestedClass staticInner = new StaticNestedClass();System.out.println(staticInner.sharedInfo);} }
-
局部内部类(Local Inner Class) - 相当于家人邀请的朋友,只存在于某次聚会(方法)中,外面的人不认识他。一旦聚会结束,他就消失了。
// 外部类 public class OuterClass {// 方法内的局部内部类public void method() {class LocalInnerClass {public void sayHello() {System.out.println("Hello from the local inner class!");}}// 创建局部内部类的实例LocalInnerClass localInner = new LocalInnerClass();localInner.sayHello();} }
-
匿名内部类(Anonymous Inner Class) - 想象成家里的神秘访客,没有名字,只有行为。他们来了,做了些事情,然后就消失在夜色中。
// 使用匿名内部类实现接口 public class OuterClass {public void useAnonymousInner() {Runnable runnable = new Runnable() { // 匿名内部类@Overridepublic void run() {System.out.println("Running...");}};runnable.run(); // 调用run方法} }