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:
public: Hər yerdən, paket daxilində və xaricində əlçatandır.protected: Eyni paket daxilində və alt siniflərdə (hətta digər paketlərdə) əlçatandır.- Varsayılan rejim (default və ya package-private): Yalnız eyni paket daxilində əlçatandır. Modifikator ilə açıq şəkildə göstərilmir.
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.