nested class - (inner / static)
پنجشنبه, ۳ شهریور ۱۴۰۱، ۰۶:۵۱ ق.ظ
nested class به کلاسی می گویند که داخل کلاسی دیگر تعریف شده است.
اگر استاتیک باشد به آن Static Nested Class می گویند. و اگر نان استاتیک باشد به آن اینر کلاس (inner class) می گویند.
class OuterClass {
...
static class StaticNestedClass {
...
}
class InnerClass {
...
}
}
OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass();
OuterClass outerObject = new OuterClass(); OuterClass.InnerClass innerObject = outerObject.new InnerClass();
آبجکت اینر کلاس از روی آبجکت اوتر کلاس ساخته می شود و به تمام متدها و فیلدهای آبجکت اوترکلاس دسترسی دارد.
مثال به کار گیری کلاس های نستد:
public class OuterClass {
String outerField = "Outer field";
static String staticOuterField = "Static outer field";
class InnerClass {
void accessMembers() {
System.out.println(outerField);
System.out.println(staticOuterField);
}
}
static class StaticNestedClass {
void accessMembers(OuterClass outer) {
// System.out.println(outerField); // Compiler error: Cannot make a static reference to the non-static field outerField
System.out.println(outer.outerField);
System.out.println(staticOuterField);
}
}
public static void main(String[] args) {
System.out.println("Inner class:");
System.out.println("------------");
OuterClass outerObject = new OuterClass();
OuterClass.InnerClass innerObject = outerObject.new InnerClass();
innerObject.accessMembers();
System.out.println("\nStatic nested class:");
System.out.println("--------------------");
StaticNestedClass staticNestedObject = new StaticNestedClass();
staticNestedObject.accessMembers(outerObject);
System.out.println("\nTop-level class:");
System.out.println("--------------------");
TopLevelClass topLevelObject = new TopLevelClass();
topLevelObject.accessMembers(outerObject);
}
}
public class TopLevelClass {
void accessMembers(OuterClass outer) {
// System.out.println(OuterClass.outerField); // Compiler error: Cannot make a static reference to the non-static field OuterClass.outerField
System.out.println(outer.outerField);
System.out.println(OuterClass.staticOuterField);
}
}
۰۱/۰۶/۰۳