Java Inner Classes
کلاسهای درونی (Inner Classes) در جاوا
کلاسهای درونی (Inner Classes) در جاوا کلاسهایی هستند که داخل یک کلاس دیگر تعریف میشوند. این کلاسها میتوانند به اعضای کلاس خارجی (متغیرها و متدها) دسترسی داشته باشند. استفاده از کلاسهای درونی، بهویژه در مواقعی که قصد دارید کدی را که فقط در داخل یک کلاس خاص استفاده میشود، پنهان کنید، مفید است.
انواع کلاسهای درونی در جاوا:
-
کلاسهای درونی معمولی (Non-static inner classes): این کلاسها به یک نمونه از کلاس خارجی وابسته هستند و برای ایجاد یک شیء از آنها باید یک شیء از کلاس خارجی نیز وجود داشته باشد.
-
کلاسهای درونی استاتیک (Static nested classes): این کلاسها مانند کلاسهای درونی معمولی هستند، با این تفاوت که میتوانند بدون نیاز به شیء کلاس خارجی، ایجاد شوند. این کلاسها معمولاً برای زمانی که نیازی به دسترسی به اعضای غیر استاتیک کلاس خارجی ندارید، مفید هستند.
-
کلاسهای درونی محلی (Local inner classes): این کلاسها داخل یک متد یا بلوک کد تعریف میشوند و تنها در داخل آن متد یا بلوک معتبر هستند.
-
کلاسهای درونی ناشناخته (Anonymous inner classes): اینها کلاسهایی بدون نام هستند که معمولاً برای ایجاد یک کلاس داخلی یکبار مصرف استفاده میشوند. این نوع کلاسها در جاوا معمولاً در هنگام کار با اینترفیسها یا کلاسهای انتزاعی برای پیادهسازی سریع استفاده میشوند.
مثال از کلاسهای درونی معمولی
class OuterClass {
private String outerField = “Outer Class Field”;
// کلاس درونی
class InnerClass {
public void display() {
System.out.println(“Accessing outer class field: “ + outerField);
}
}
public void createInnerClass() {
InnerClass inner = new InnerClass(); // ساخت شیء از کلاس درونی
inner.display();
}
}
public class Main {
public static void main(String[] args) {
OuterClass outer = new OuterClass();
outer.createInnerClass(); // فراخوانی متد برای ایجاد و استفاده از کلاس درونی
}
}
مثال از کلاسهای درونی استاتیک
class OuterClass {
private static String outerField = “Static Outer Class Field”;
// کلاس درونی استاتیک
static class StaticInnerClass {
public void display() {
System.out.println(“Accessing static outer class field: “ + outerField);
}
}
public void createStaticInnerClass() {
StaticInnerClass inner = new StaticInnerClass(); // ساخت شیء از کلاس درونی استاتیک
inner.display();
}
}
public class Main {
public static void main(String[] args) {
OuterClass outer = new OuterClass();
outer.createStaticInnerClass(); // فراخوانی متد برای استفاده از کلاس درونی استاتیک
}
}
مثال از کلاسهای درونی ناشناخته (Anonymous Inner Classes)
interface Greeting {
void greet();
}
public class Main {
public static void main(String[] args) {
// استفاده از کلاس ناشناخته برای پیادهسازی اینترفیس
Greeting greeting = new Greeting() {
public void greet() {
System.out.println(“Hello, this is an anonymous inner class!”);
}
};
greeting.greet(); // فراخوانی متد greet
}
}
مزایای استفاده از کلاسهای درونی
- کاهش پیچیدگی کد: به دلیل اینکه کدهای مربوط به یک کلاس خاص در همان کلاس خارجی نگهداری میشوند، پیچیدگی کد کاهش مییابد.
- دسترسی به اعضای کلاس خارجی: کلاسهای درونی میتوانند به متغیرها و متدهای کلاس خارجی دسترسی مستقیم داشته باشند.
- قابلیت استفاده در طراحیهای خاص: کلاسهای درونی معمولاً در زمانی که نیاز به کدهای یکبار مصرف یا کدهای پنهان داریم (مثل پیادهسازی اینترفیسها یا بهبود عملکرد UI) استفاده میشوند.
معایب
- سختی در تست کردن: ممکن است تست کردن کلاسهای درونی کمی دشوارتر باشد.
- وابستگی بالا: کلاسهای درونی معمولاً به کلاس خارجی وابسته هستند، بنابراین این وابستگی میتواند باعث پیچیدگی و کاهش انعطافپذیری شود.
دیدگاهتان را بنویسید