توضیحات
میتونیم داخل کلاس یک کلاس دیگه تعریف کنیم که بهش کلاس تو در تو یا (Nested Class) میگیم.
به کلاسی که داخلش کلاس تعریف میکنیم کلاس بیرونی یا outer class میگیم.
کلاس های داخلی در کاتلین از قوانین کلیدواژه های سطح دسترسی بقیه ی اعضای کلاس بیرونی پیروی میکنن.
در کاتلین مانند جاوا کلاس های تو در تو به دو دسته ی کلاس استاتیک تو در تو (Static Nested Class) و کلاس غیر استاتیک داخلی (Non-static Inner Class) تقسیم میشن.
در کاتلین علاوه بر کلاس میتونیم اینترفیس رو داخل یک کلاس تعریف کنیم همینطور میتونیم داخل اینترفیس کلاس و اینترفیس تعریف کنیم و محدودیتی وجود نداره.
کلاس استاتیک تو در تو (Static Nested Class) در کاتلین
در کاتلین کافیه یک کلاس معمولی داخل کلاس تعریف کنیم و برای ساخت آبجکت ازش مثل زیر عمل می کنیم:
در زیر یک کلاس به عنوان کلاس بیرونی و یک کلاس به عنوان کلاس تو در تو و یک تابع برای چاپ پیام از کلاس تو در تو تعریف کردیم.
کلاس غیر استاتیک داخلی (Non-Static Inner Class)
برای تعریف کلاس های غیر استاتیک داخلی از کلیدواژه ی inner استفاده میکنیم
این کلاس ها وابسته به آبجکت کلاس بیرونی هستند و به اعضای کلاس بیرونی دسترسی دارن
.برای ساخت ابجکت از این کلاس ها ابتدا یک آبجکت از کلاس بیرونی میسازیم و پس از گذاشتن نقطه آبجکت از کلاس داخلی رو ایجاد میکنیم
مثال زیر بیانگر دسترسی کلاس داخلی به کلاس خارجی و نحوه ی تعریف کلاس داخلی در داخل کلاس خارجی است.
ساخت نمونه از کلاس و اینترفیس های تو در تو به صورت anonymous
میتونیم از کلاس ها و اینترفیس های داخلی توسط کلید واژه ی object به صورت بی نام نمونه بسازیم.
در زیر نشون میدیم چطور setOnClickListener در کلاس View اندروید طراحی شده
خلاصه
- به کلاسی که داخلش کلاس تعریف میکنیم کلاس بیرونی (outer class) میگیم.
- در کاتلین دو نوع کلاس تو در تو داریم: استاتیک تو در تو و غیر استاتیک داخلی.
- کلاس های تو در تو از قوانین سطح دسترسی سایر اعضای کلاس بیرونی پیروی میکنن.
کلاس استاتیک تو در تو رو مثل کلاس معمولی داخل کلاس تعریف می کنیم.
کلاس غیر استاتیک داخلی رو با کلید واژه ی inner تعریف می کنیم.
- کلاس های غیر استاتیک داخلی به تمام اعضای کلاس بیرونی دسترسی دارن.
- میتونیم از کلاس های تو در تو به صورت بی نام (anonymous) آبجکت بسازیم.