آموزش کلاس های تودرتو در جاوا
تمام کلاس هایی که قبلا مورد مطالعه قرار داده ایم، در داخل فایل خودشان ذخیره می شدند و همواره نام این فایل برابر با نام کلاس مورد نظر بوده است.
در زبان برنامه نویسی جاوا، می توانیم در داخل یک کلاس، کلاس دیگری ایجاد کنیم و آنها را با یکدیگر ذخیره کنیم. به این نوع کلاس ها، کلاس های تودرتو(nested classes) می گوییم. به کلاسی که حاوی یک کلاس دیگر است، کلاس سطح بالا(top-level) گفته می شود. در زبان برنامه نویسی جاوا، چهار نوع کلاس تودرتو وجود دارد که عبارتند از:
- کلاس های عضوی استاتیک:
یک کلاس عضوی استاتیک، به تمام متدهای استاتیک کلاس اصلی (کلاس سطح بالا) دسترسی دارد. - کلاس های عضوی غیر استاتیک:
معمولا به این کلاس ها، کلاس درونی(inner ) گفته می شود. این کلاس ها به نمونه گیری(instance) نیاز دارند. این نوع کلاس، به تمام داده ها و متدهای کلاس اصلی(سطح بالا) دسترسی دارد. - کلاس های محلی(Local ):
این کلاس ها به یک بلوک از کدها محدود می شوند. - کلاس های بی نام(Anonymous):
این نوع کلاس ها، کلاس های محلی(local ) هستند که شناسه(نام) ندارند.
دلیل اصلی برای قرار دادن یک کلاس در داخل یک کلاس دیگر این است که کلاس درونی(inner) تنها توسط کلاس اصلی(سطح بالا) مورد استفاده قرار گیرد. به عبارت دیگر کلاس درونی یک کلاس کمکی برای کلاس اصلی محسوب می شود. قرار دادن کلاس ها در داخل یکدیگر، باعث می شود درک آنها آسان تر شود و نگهداری کدها نیز راحت تر شود.
به عنوان مثال فرض کنید یک کلاس به نام RealEstateListing برای یک شرکت مشاور املاک ایجاد کرده ایم تا اطلاعات املاک آماده ی فروش را ارائه دهد. این کلاس می تواند حاوی پروپرتی هایی از قبیل کدپستی(listing number) و قیمت(price) و آدرس(address) و محله ای(living area) که خانه در آن قرار دارد، باشد. اما بعنوان یک روش دیگر، می توانیم پروپرتی های price و listingNumber را در کلاس اصلی تعریف کنیم و پروپرتی های streetAddress و squareFeet را در داخل کلاس درونی HouseData تعریف کنیم. این موضوع در تصویر 4.39 نشان داده شده است:
توجه کنید که، کلاس درونی تصویر 4.39 یک کلاس private می باشد.
شما مجبور نیستید کلاس های درونی را به صورت private تعریف کنید. اما اگر این کار را انجام دهید، محتوای آن برای کلاس های خارجی قابل مشاهده و دسترسی نخواهد بود. اگر می خواهید محتوای یک کلاس برای کلاس های خارجی، در دسترس باشند، می توانید آن را به صورت درونی(inner) تعریف نکنید. یک کلاس درونی(inner) می تواند به پروپرتی ها و متدهای کلاس اصلی(سطح بالا) دسترسی داشته باشد؛ حتی اگر آنها از نوع private باشند. کلاس های اصلی(سطح بالا) نیز می توانند به محتویات کلاس درونی(inner) دسترسی داشته باشند.
اگر نمی خواهید کلاس های تو در تو ایجاد کنید، می توانید با استفاده از composition، یک کلاس معمولی را با یک کلاس دیگر ترکیب کنید. (مبحث composition در مقاله ی قبلی توضیح داده شده است).
- نوشته شده توسط احسان عباسی
- بازدید: 4001