Sobes.tech
Junior

Java proqramlaşdırma kontekstində görünürlük nədir?

sobes.tech Süni İntellekt

AI-dan cavab

Java kontekstində (həm də görünmə sahəsi adlanır) görünürlük dəyişənin, metodun, konstruktorun və ya sinifin digər proqram hissələrindən əlçatanlığını müəyyən edir. Bu, giriş modifikatorları ilə idarə olunur.

Java dörd səviyyədə görünürlük mövcuddur:

  1. public: Hər yerdən, paket daxilində və xaricində əlçatandır.
  2. protected: Eyni paket daxilində və alt siniflərdə (hətta digər paketlərdə) əlçatandır.
  3. Varsayılan rejim (default və ya package-private): Yalnız eyni paket daxilində əlçatandır. Modifikator ilə açıq şəkildə göstərilmir.
  4. private: Yalnız eyni sinif daxilində əlçatandır.
Modifikator Sinif Paket Alt sinif (paket xaricində) Hər hansı sinif (paket xaricində)
public Bəli Bəli Bəli Bəli
protected Bəli Bəli Bəli Xeyr
Default Bəli Bəli Xeyr Xeyr
private Bəli Xeyr Xeyr Xeyr

Görünürlük modifikatorlarının istifadəsi inkapsulyasiya və proqram elementlərinə girişin idarə olunmasında mühüm rol oynayır.

Modifikatorların istifadəsinə nümunə:

// A sinfi com.example.package1 paketində
package com.example.package1;

public class ClassA {
    public int publicVar;
    protected int protectedVar;
    int defaultVar; // Varsayılan modifikator
    private int privateVar;

    public void publicMethod() {
        // ClassA sinifinin bütün dəyişənlərinə giriş edə bilər
        System.out.println("ClassA-də ictimai metod");
    }

    protected void protectedMethod() {
        System.out.println("ClassA-də qorunan metod");
    }

    void defaultMethod() {
        System.out.println("ClassA-də varsayılan metod");
    }

    private void privateMethod() {
        System.out.println("ClassA-də xüsusi metod");
    }

    public void accessMembers() {
        publicVar = 1;
        protectedVar = 2;
        defaultVar = 3;
        privateVar = 4; // Yaxşı, sinif daxilində
        privateMethod(); // Yaxşı, sinif daxilində
    }
}
// Eyni paketdə ClassB
package com.example.package1;

public class ClassB {
    public void accessClassAMembers(ClassA objA) {
        objA.publicVar = 10; // Yaxşı, public
        objA.protectedVar = 20; // Yaxşı, protected (eyni paket)
        objA.defaultVar = 30; // Yaxşı, default (eyni paket)
        // objA.privateVar = 40; // Səhv, private
        objA.publicMethod(); // Yaxşı, public
        objA.protectedMethod(); // Yaxşı, protected (eyni paket)
        objA.defaultMethod(); // Yaxşı, default (eyni paket)
        // objA.privateMethod(); // Səhv, private
    }
}
// Fərqli paketdə ClassC
package com.example.package2;
import com.example.package1.ClassA;

public class ClassC extends ClassA { // ClassC ClassA-nın alt sinfi
    public void accessClassAMembersFromSubclass() {
        publicVar = 100; // Yaxşı, public
        protectedVar = 200; // Yaxşı, protected (alt sinif, hətta başqa paketdə)
        // defaultVar = 300; // Səhv, default (başqa paket)
        // privateVar = 400; // Səhv, private

        publicMethod(); // Yaxşı, public
        protectedMethod(); // Yaxşı, protected (alt sinif, başqa paket)
        // defaultMethod(); // Səhv, default (başqa paket)
        // privateMethod(); // Səhv, private
    }
}
// Fərqli paketdə ClassD
package com.example.package2;
import com.example.package1.ClassA;

public class ClassD {
    public void accessClassAMembers(ClassA objA) {
        objA.publicVar = 1000; // Yaxşı, public
        // objA.protectedVar = 2000; // Səhv, protected (başqa paket, alt sinfi deyil)
        // objA.defaultVar = 3000; // Səhv, default (başqa paket)
        // objA.privateVar = 4000; // Səhv, private

        objA.publicMethod(); // Yaxşı, public
        // objA.protectedMethod(); // Səhv, protected (başqa paket, alt sinfi deyil)
        // objA.defaultMethod(); // Səhv, default (başqa paket)
        // objA.privateMethod(); // Səhv, private
    }
}

Görünürlük anlayışını başa düşmək daha etibarlı və modul kodlar yaratmağa kömək edir, siniflərin daxili detalları üçün istənməyən girişləri məhdudlaşdırır.