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); } }
۰۱/۰۶/۰۳