Sobes.tech
Junior

Java dasturlash kontekstida ko'rinish nima?

sobes.tech AI

AIdan javob

Java kontekstida ko‘rishlilik (shuningdek, ko‘rish doirasi deb ham ataladi) o‘zgaruvchi, metod, konstruktor yoki sinfga dasturning boshqa qismlaridan kirish imkoniyatini belgilaydi. Bu kirish modifikatorlari bilan boshqariladi.

Java’da to‘rt darajadagi ko‘rishlilik mavjud:

  1. public: Paket ichida va tashqarisida har joydan kirish mumkin.
  2. protected: Xuddi shuningdek, paket ichida va subclasslarda (hatto boshqa paketlarda ham) kirish mumkin.
  3. Standart rejim (default yoki package-private): Faqatgina xuddi shuningdek, paket ichida kirish mumkin. Aniq modifikator bilan ko‘rsatilmaydi.
  4. private: Faqatgina xuddi shuningdek, sinf ichida kirish mumkin.
Modifikator Sinf Paket Subklass (paket tashqarisida) Har qanday sinf (paket tashqarisida)
public Ha Ha Ha Ha
protected Ha Ha Ha Yo‘q
Default Ha Ha Yo‘q Yo‘q
private Ha Yo‘q Yo‘q Yo‘q

Ko‘rish modifikatorlaridan foydalanish, inkapsulyatsiya va dastur elementlariga kirishni nazorat qilishda muhim rol o‘ynaydi.

Misol uchun, ko‘rish modifikatorlaridan foydalanish:

// com.example.package1 paketidagi A sinfi
package com.example.package1;

public class ClassA {
    public int publicVar;
    protected int protectedVar;
    int defaultVar; // Standart modifikator
    private int privateVar;

    public void publicMethod() {
        // ClassA sinfidagi barcha o‘zgaruvchilarga kirish mumkin
        System.out.println("ClassA ichidagi umumiy metod");
    }

    protected void protectedMethod() {
        System.out.println("ClassA ichidagi himoyalangan metod");
    }

    void defaultMethod() {
        System.out.println("ClassA ichidagi standart metod");
    }

    private void privateMethod() {
        System.out.println("ClassA ichidagi shaxsiy metod");
    }

    public void accessMembers() {
        publicVar = 1;
        protectedVar = 2;
        defaultVar = 3;
        privateVar = 4; // OK, sinf ichida kirish
        privateMethod(); // OK, sinf ichida kirish
    }
}
// B sinfi, xuddi shuningdek, com.example.package1 paketida
package com.example.package1;

public class ClassB {
    public void accessClassAMembers(ClassA objA) {
        objA.publicVar = 10; // OK, umumiy
        objA.protectedVar = 20; // OK, himoyalangan (xuddi shuningdek, paket)
        objA.defaultVar = 30; // OK, standart (xuddi shuningdek, paket)
        // objA.privateVar = 40; // Kompilatsiya xatosi, shaxsiy
        objA.publicMethod(); // OK, umumiy
        objA.protectedMethod(); // OK, himoyalangan (xuddi shuningdek, paket)
        objA.defaultMethod(); // OK, standart (xuddi shuningdek, paket)
        // objA.privateMethod(); // Kompilatsiya xatosi, shaxsiy
    }
}
// C sinfi, boshqa paketda, com.example.package2
package com.example.package2;
import com.example.package1.ClassA;

public class ClassC extends ClassA { // ClassC, ClassA ning subclassi
    public void accessClassAMembersFromSubclass() {
        publicVar = 100; // OK, umumiy
        protectedVar = 200; // OK, himoyalangan (subklass, hatto boshqa paketda)
        // defaultVar = 300; // Kompilatsiya xatosi, standart (boshqa paket)
        // privateVar = 400; // Kompilatsiya xatosi, shaxsiy

        publicMethod(); // OK, umumiy
        protectedMethod(); // OK, himoyalangan (subklass, hatto boshqa paketda)
        // defaultMethod(); // Kompilatsiya xatosi, standart (boshqa paket)
        // privateMethod(); // Kompilatsiya xatosi, shaxsiy
    }
}
// D sinfi, boshqa paketda, com.example.package2 (ClassA ning subclassi emas)
package com.example.package2;
import com.example.package1.ClassA;

public class ClassD {
    public void accessClassAMembers(ClassA objA) {
        objA.publicVar = 1000; // OK, umumiy
        // objA.protectedVar = 2000; // Kompilatsiya xatosi, himoyalangan (boshqa paket, subclass emas)
        // objA.defaultVar = 3000; // Kompilatsiya xatosi, standart (boshqa paket)
        // objA.privateVar = 4000; // Kompilatsiya xatosi, shaxsiy

        objA.publicMethod(); // OK, umumiy
        // objA.protectedMethod(); // Kompilatsiya xatosi, himoyalangan (boshqa paket, subclass emas)
        // objA.defaultMethod(); // Kompilatsiya xatosi, standart (boshqa paket)
        // objA.privateMethod(); // Kompilatsiya xatosi, shaxsiy
    }
}

Ko‘rishlilikni tushunish, yanada ishonchli va modulli kod yozishga yordam beradi, sinflarning ichki tafsilotlariga ruxsatsiz kirishni cheklash orqali.