-
طبقات داخلی کدامند؟
- کلاس های تو در تو به دو نوع استاتیک و غیر استاتیک تقسیم می شوند.
- کلاس های تودرتو که به عنوان استاتیک اعلام می شوند، کلاس های تودرتو ایستا نامیده می شوند.
- کلاس های غیر استاتیک تو در تو کلاس های داخلی نامیده می شوند.
-
یک کلاس داخلی ناشناس در چه چیزی کامپایل می کند؟
به یک کلاس داخلی غیر استاتیک
-
چرا
final
هنگام ایجاد کلاس های ناشناس از کلمه کلیدی استفاده می کنیم؟اگر یک کلاس داخلی ناشناس تعریف شده باشد و نیاز به استفاده از اشیاء تعریف شده خارج از این کلاس داخلی داشته باشد، کامپایلر نیاز دارد که مراجع ارسال شده به آنها غیرقابل تغییر (نهایی) اعلام شود. بدون چنین اعلانی، هنگام کامپایل برنامه با خطا مواجه خواهید شد.
-
چگونه به درستی یک شی کلاس داخلی ایجاد کنیم؟
کلاس های داخلی (غیر ایستا)، مانند متغیرها و متدها، با یک شی از کلاس خارجی مرتبط هستند. کلاس های داخلی نیز دسترسی مستقیم به فیلدهای کلاس بیرونی دارند. چنین کلاس هایی نمی توانند شامل متدها و فیلدهای ثابت باشند. طبقات درونی بدون نمونه ای از طبقه بیرونی نمی توانند وجود داشته باشند. برای ایجاد یک شی:
Outer outer = new Outer(); Innter inner = outer.new Inner();
-
چگونه یک شی از یک کلاس تودرتو به درستی ایجاد کنیم؟
سینتکس ایجاد یک شی کلاس تو در تو به این صورت است:
OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass();
-
آیا امکان ایجاد متد/متغیرهای استاتیک در یک کلاس داخلی وجود دارد؟
متدها/متغیرهای استاتیک را نمی توان در یک کلاس داخلی (نه یک کلاس تودرتو) اعلان کرد.
کلاس های داخلی (غیر ایستا)، مانند متغیرها و متدها، با یک شی از کلاس خارجی مرتبط هستند. چنین کلاس هایی نمی توانند شامل متدها و فیلدهای ثابت باشند.
-
هر سه طبقه داخلی را نام ببرید؟
private static class Holder
-کلاس تودرتوHashMap
ازjava.util
.- اینترفیس
Map
دارای استinterface Entry<K,V>
که دوباره در استHashMap
و در کلاس تودرتو دیگری پیاده سازی می شودstatic class Entry<K,V> implements Map.Entry<K,V>
. private static class IntegerCache
در کلاسInteger
.
-
چگونه کلاس های داخلی مشکل وراثت چندگانه در جاوا را حل می کنند؟
زیرا ارث بردن چندگانه کلاس ها در جاوا ممنوع است، این مشکل با کمک کلاس های داخلی حل می شود: در کلاسی که نیاز داریم، یک کلاس داخلی اعلام می کنیم و آن را از کلاس مورد نیاز به ارث می بریم. مثال:
class Tiger extends Cat { public void tigerRun() { ..... } public void startTiger() { TigerThread thread = new TigerThread(); thread.start(); } class TigerThread extends Thread { public void run() { tigerRun(); } } }
-
تفاوت بین کلاس های ناشناس مبتنی بر رابط و کلاس مبتنی بر چیست؟
یک کلاس ناشناس مطابق JLS 15.9.5 عبارتی است که در آن اعلان یک کلاس جدید و مقداردهی اولیه آن با هم ترکیب می شوند:
- هنگام اعلان یک کلاس، یک کلاس جدید ایجاد می شود که وقتی به عنوان پایه کلاس دیگری استفاده می شود، از کلاس مشخص شده مشتق می شود، یا زمانی که به عنوان پایه یک رابط استفاده می شود، اینترفیس را پیاده سازی می کند.
- در طول مقداردهی اولیه، یک شی جدید ایجاد می شود و یک مرجع به آن بازگردانده می شود: کلاس ناشناس مشخص است.
بنابراین، تنها تفاوت در کلاسهای ناشناس مبتنی بر رابط و کلاسمحور، تعداد روشهای انتزاعی است که باید پیادهسازی شوند.
Инициализации анонимного класса на основе интерфейса потребует реализации каждого метода, в то время How при инициализации анонимного класса на основе абстрактного/конкретного класса позволит изменить поведение за счет перегрузки методов и потребует реализации абстракных методов.
-
Можно ли создать анонимный статический вложенный класс?
Нет, статической становится только переменная, но не класс.
GO TO FULL VERSION