Sobes.tech
Junior

Həll edilən sinflər nədir?

sobes.tech Süni İntellekt

AI-dan cavab

Daxil olan siniflər (nested classes) — bu, başqa bir sinif daxilində elan olunan siniflərdir. Onlar statik (static nested classes) və statik olmayan (inner classes) ola bilər.

Statik daxil olan siniflər:

  • static modifikatoru ilə elan olunurlar.
  • Xarici sinifin statik olmayan üzvlərinə birbaşa daxil olmurlar (yalnız xarici sinif nümunəsi vasitəsilə).
  • Həm statik, həm də statik olmayan üzvləri içərə bilər.
  • Xarici sinif nümunəsi olmadan yaradılırlar.
public class Outer {
    private static int staticOuterVar = 10;
    private int instanceOuterVar = 20;

    public static class StaticNested {
        // staticOuterVar-ə giriş var
        public void printStaticValue() {
            System.out.println(staticOuterVar);
        }

        // instanceOuterVar-ə birbaşa giriş yoxdur
        // public void printInstanceValue() {
        //     System.out.println(instanceOuterVar); // Yığım xətası
        // }
    }
}

Statik daxil olan sinifdən istifadə:

// Statik daxil olan sinif nümunəsinin yaradılması nümunəsi
Outer.StaticNested nestedObject = new Outer.StaticNested();
nestedObject.printStaticValue(); // 10 çıxaracaq

Statik olmayan daxil olan siniflər (Inner Classes):

  • static modifikatoru ilə elan olunmur.
  • Xarici sinifin bütün üzvlərinə, o cümlədən xüsusi üzvlərə də tam giriş imkanı var.
  • Statik üzvlər (sabitlər istisna olmaqla) daxil edə bilməz.
  • Yaradılması üçün xarici sinif nümunəsi lazımdır.
public class Outer {
    private static int staticOuterVar = 10;
    private int instanceOuterVar = 20;

    public class Inner {
        // staticOuterVar və instanceOuterVar-ə giriş var
        public void printValues() {
            System.out.println(staticOuterVar); // Mövcuddur
            System.out.println(instanceOuterVar); // Mövcuddur
        }
    }
}

Statik olmayan daxil olan sinifdən istifadə:

// Statik olmayan daxil olan sinif nümunəsinin yaradılması nümunəsi
Outer outerObject = new Outer();
Outer.Inner innerObject = outerObject.new Inner();
innerObject.printValues(); // 10 və 20 çıxaracaq

Daxil olan siniflərin istifadəsinin üstünlükləri:

  1. Məntiqi qruplaşdırma: Yalnız bir digər sinif tərəfindən istifadə olunan siniflər onu daxilində məntiqi şəkildə qruplaşdıra bilər.
  2. İnkişaf etdirilmə və gizlilik: Daxil olan siniflər xarici sinifin xüsusi üzvlərinə giriş imkanı verir.
  3. Oxunaqlıq və dəstək: Kod daha tənzimlənmiş olur.

Statik olmayan daxil olan siniflərin növləri:

  • Yerli siniflər: Metod daxilində elan olunur.
  • Anonim siniflər: Adı olmayan siniflər, adətən abstrakt sinif, interfeys və ya baz sinifin nümunəsini yaratmaq üçün istifadə olunur və metodların yenidən təyin olunmasını ehtiva edir.

Yerli sinif:

public class Outer {
    public void myMethod() {
        class LocalClass {
            void display() {
                System.out.println("Yerli sinif daxilində");
            }
        }
        LocalClass local = new LocalClass();
        local.display();
    }
}

Anonim sinif (interfeys nümunəsi ilə nümunə):

interface Greeting {
    void sayHello();
}

public class Outer {
    public void greet() {
        Greeting anonymousGreeting = new Greeting() {
            @Override
            public void sayHello() {
                System.out.println("Anonim sinifdən salam!");
            }
        };
        anonymousGreeting.sayHello();
    }
}