Middle
İç içə sinflər və onların hansı hallarda istifadə olunduğu haqqında danış.
sobes.tech Süni İntellekt
AI-dan cavab
Java-da Nested Classes (Daxil olan Sinflər) başqa sinifin içində müəyyən edilən sinflərdir. Onlar iki növə bölünür: statik (Static Nested Classes) və daxili sinflər (Inner Classes).
Statik daxili sinflər
staticmodifieri ilə elan edilir.- Yalnız xarici sinfin statik üzvlərinə (həmçinin gizlədilmiş olanlara) giriş imkanı verir.
- Xarici sinfin qeyri-statik üzvlərinə giriş imkanı yoxdur.
- Statik daxili sinfin nümunəsini yaratmaq üçün xarici sinfin nümunəsi tələb olunmur:
// Xarici sinif class Outer { static int outerStaticField; int outerInstanceField; // Statik daxili sinif static class StaticNested { void accessOuter() { // Xarici sinfin statik sahəsinə giriş System.out.println(Outer.outerStaticField); // outerInstanceField-ə giriş yoxdur // System.out.println(outerInstanceField); // Kompilyasiya xətası } } } // Statik daxili sinifdən istifadə class Main { public static void main(String[] args) { Outer.StaticNested nestedObject = new Outer.StaticNested(); nestedObject.accessOuter(); } }
Daxili siniflər
staticmodifieri ilə elan edilmir.- Xarici sinfin bütün üzvlərinə (statik və qeyri-statik, hətta gizlədilmiş) tam giriş imkanı verir.
- Daxili sinfin nümunəsi xarici sinfin nümunəsindən asılıdır.
- Daxili sinfin nümunəsini yaratmaq üçün xarici sinfin nümunəsi lazımdır:
// Xarici sinif class Outer { static int outerStaticField; int outerInstanceField; // Daxili sinif class Inner { void accessOuter() { // Xarici sinfin statik sahəsinə giriş System.out.println(Outer.outerStaticField); // Xarici sinfin qeyri-statik sahəsinə giriş System.out.println(outerInstanceField); } } } // Daxili sinifdən istifadə class Main { public static void main(String[] args) { Outer outerObject = new Outer(); Outer.Inner innerObject = outerObject.new Inner(); innerObject.accessOuter(); } }
Daxili siniflər aşağıdakı kateqoriyalara bölünür:
- Nizamlı daxili sinflər: Birbaşa xarici sinfin daxilində müəyyən edilir.
- Yerli daxili sinflər: Metodlar, konstruktörlər və ya initsializasiya blokları daxilində müəyyən edilir və yalnız həmin blok daxilində görünür.
class Outer { void display() { class LocalInner { // Yerli daxili sinf void message() { System.out.println("Yerli daxili sinf"); } } LocalInner obj = new LocalInner(); obj.message(); } } - Anonim daxili sinflər: Adı olmayan sinflərdir, sinif və ya interfeys nümunəsi yaratmaq və onların implementasiyasını dərhal təmin etmək üçün istifadə olunur. Çox vaxt hadisə dinləyiciləri ilə istifadə olunur.
interface Greeting { void sayHello(); } class Main { public static void main(String[] args) { Greeting greeting = new Greeting() { // Adı olmayan daxili sinif @Override public void sayHello() { System.out.println("Salam!"); } }; greeting.sayHello(); } }
Daxili sinflər nə zaman tətbiq olunur:
- Məntiqi qruplaşdırma: Əgər sinif yalnız başqa bir sinfin bir hissəsidirsə və onları birlikdə qruplaşdırmaq məntiqlidirsə. Bu, kodun oxunaqlığını və saxlanmasını yaxşılaşdırır.
- Encapsulation: Daxili sinflər xarici sinfin üzvlərinə giriş imkanı verə bilər, bu da daha sıx əlaqə və implementasiya detallərinin gizlədilməsini təmin edir.
- Daha oxunaqlı kod: Kiçik və sadə sinif yalnız bir yerdə istifadə olunursa, onun daxil edilməsi kodu daha təmiz edə bilər.
- Resursların səmərəli istifadəsi: Daxili sinflər xarici sinfin üzvlərinə giriş imkanı verir, bu da kodu sadələşdirə bilər. Məsələn, iteratorların həyata keçirilməsi.
- İnterfeys və ya siniflərin genişləndirilməsi kontekstində: Anonim daxili sinflər tez-tez interfeys və ya abstrakt sinflərin qısa həyata keçirilməsini "canlı" təmin etmək üçün istifadə olunur.
- Həllərin gizlədilməsi: Bir sinfi başqa sinif daxilində gizlətmək, onu xaricdən görünməz etmək.
Statik və daxili sinflərin müqayisəsi:
| Parametr | Statik daxili sinif | Daxili sinif |
|---|---|---|
static modifieri |
Bəli | Xeyr |
| Xarici sinfin üzvlərinə giriş | Yalnız statik (hətta private) | Bütün üzvlər (statik və qeyri-statik, private) |
| Yaratmaq üçün xarici sinfin nümunəsi tələb olunur | Xeyr | Bəli |
| Xarici sinif nümunəsi ilə əlaqə | Xeyr | Bəli |
Seçim, daxili sinfin xarici sinfinin qeyri-statik üzvlərinə ehtiyacı olub-olmamasına bağlıdır. Əgər ehtiyac varsa, daxili sinfi istifadə edin. Əks halda, statik daxili sinf daha uyğundur, çünki o, xarici sinfin nümunəsinə bağlı deyil və daha səmərəli ola bilər.