内部类:静态内部类
程序员文章站
2022-05-22 08:32:10
...
package org.lgy.study.innerclass; /* 静态内部类属于外部类本身,而不属于外部类的对象。 使用静态内部类时无需创建外部类的对象。 */ public class StaticInnerClass{ private String str1 = "non static str1 in outer"; private static String str2 = "static str2 in outer"; public void method1(){ System.out.println("non static method1 in outer"); //外部类的实例方法可以访问静态内部类的任何成员,无论该成员是静态成员还是非静态成员。 //即使是内部类的私有属性,也可以在外部类中直接访问;但必须使用类名作为调用者来访问其类成员, //必须使用静态内部类对象作为调用者来访问其实例成员。 InnerClass in = new InnerClass(); System.out.println("in.str1 = " + in.str1); System.out.println("InnerClass.str2 = " + InnerClass.str2); in.method1(); InnerClass.method2(); } public static void method2(){ System.out.println("static method2 in outer"); //外部类的类方法可以访问静态内部类的任何成员,无论该成员是静态成员还是非静态成员。 //即使是内部类的私有属性,也可以在外部类中直接访问;但必须使用类名作为调用者来访问其类成员, //必须使用静态内部类对象作为调用者来访问其实例成员。 InnerClass in = new InnerClass(); System.out.println("in.str1 = " + in.str1); System.out.println("InnerClass.str2 = " + InnerClass.str2); in.method1(); InnerClass.method2(); } public void method3(){ System.out.println("non static method3 in outer"); } public static void method4(){ System.out.println("static method4 in outer"); } /* 静态内部类不能访问外部类的实例成员,只能访问外部类的类成员。 即使是静态内部类的实例方法也不能访问外部类的实例成员,只能访问外部类的静态成员。 */ private static class InnerClass{ //静态内部类里可以定义任何成员(成员变量、成员方法、静态成员、非静态成员) private String str1 = "non static str1 in inner"; private static String str2 = "static str2 in inner"; public void method1(){ System.out.println("non static method1 in inner"); //静态内部类的实例方法也不能访问外部类的实例成员变量 //System.out.println("str1 in outer: " + StaticInnerClass.this.str1); System.out.println("str2 in outer: " + str2); //静态内部类的实例方法也不能访问外部类的实例成员方法 //method3(); method4(); } public static void method2(){ System.out.println("static method2 in inner"); //静态内部类的静态方法也不能访问外部类的实例成员变量 //System.out.println("str1 in outer: " + StaticInnerClass.this.str1); System.out.println("str2 in outer: " + str2); //静态内部类的静态方法也不能访问外部类的实例成员变量 //method3(); method4(); } } }