محسن نوری اردستانی | Mohsen Noori Ardestani
محسن نوری اردستانی | Mohsen Noori Ardestani
خواندن ۲ دقیقه·۲ سال پیش

Nested Class - Anonymous Class - Inner Class

سوال_مصاحبه_شیگرایی_oop (پرتکرار)
درمورد کلاس های ناشناس (anonymous) توضیح دهید؟ در مورد کلاس های محلی (local class) توضیح دهید؟ سطح_دسترسی هرکدام از این کلاس هارا نسبت به کلاس دربردارنده تعیین کنید؟

جواب: اگر کلاسی فقط مورد استفاده یک کلاس دیگر قرار میگیرد، بهتر است بجای تعریف آن کلاس درون فایل دیگر، آنرا درون کلاسی که میخواهید از آن استفاده کنید، تعریف کنید. با این کار اصل کپسوله_سازی در برنامه بیشتر رعایت میشود.

کلاس های تودرتو در جاوا به دو دسته تقسیم میشود: کلاس های داخلی(Inner Class) و کلاس های تودرتو استاتیک (static nested class). هم چنین دو نوع کلاس به نام های کلاس های محلی (Local Class) و کلاس های ناشناس (anonymous class) وجود دارند که زیرشاخه کلاس های داخلی محسوب میشوند.

کلاس های داخلی(inner class): کلاس های داخلی میتوانند به صورت مستقیم به اجزای کلاس دربردارنده دسترسی داشته باشند، همچنین تا یک شی از کلاس دربردارنده وجود نداشته باشد نمیتوان از کلاس داخلی نمونه ساخت و البته سطح دسترسی کلاس داخلی هم نباید private باشد.

کلاس های محلی (local calss): کلاس های محلی کلاس هایی هستند که در بلاک ها (متدها، سازنده ها، حلقه ها، دستورات شرطی و ...) تعریف شده و به اعضای بلوکی که در آن تعریف شده اند، دسترسی دارند. اگر یک کلاس محلی در یک متود استاتیک تعریف شده باشد ، فقط میتوان به اعضای استاتیک کلاس بیرونی خود دسترسی داشته باشند.

کلاس های ناشناس (anonymous class): این کلاس ها ماندد کلاس های محلی هستند با این تفاوت که نام ندارند و وقتی بخواهیم از یک کلاس محلی فقط یکبار استفاده کنیم میتوان بجاش از کلاس های ناشناس استفاده کرد.
کلاس های ناشناس نباید از دوحالت خارج باشند: یک اینترفیس را پیاده سازی کنند، از یک کلاس مشتق شوند(ارث بری داشته باشد).

کلاس های تودرتو استاتیک (static nested class): این کلاس ها مستقل از کلاس دربردارنده برای ایجاد شی عمل میکنند و بدون آنکه از کلاس دربردارنده شی وجود داشته باشد، میتوان از آنها نمونه ساخت. ولی این کلاس ها به اجزا و متودهای کلاس دربردارنده دسترسی ندارند چون استاتیک ماهیت کامپایل دارد و اجزای کلاس و شی ماهیت runtime

anonymous classinner classnested classکلاس دربردارندهjava
برنامه نویس سمت وب و موبایل - علاقه مند به پژوهش
شاید از این پست‌ها خوشتان بیاید