Junior
Чӣ гуна намоёнӣ дар контексти барномасозии Java аст?
sobes.tech AI
Ҷавоб аз AI
Java-да контекстте көрүнүмдүүлүк (ошондой эле көрүнүмдүүлүк аймагы деп аталат) башка бөлүмдөрдөн өзгөрмө, метод, конструктор же класска жетүүнү аныктайт. Ал жеткиликтүүлүк модификаторлору аркылуу көзөмөлдөнөт.
Javaда төрт деңгээлдеги көрүнүмдүүлүк бар:
public: пакет ичинде жана сыртында каалаган жерден жеткиликтүү.protected: ошол эле пакете жана подклассларда (башка пакеттерде да) жеткиликтүү.- Дефолт режим (default же package-private): гана ошол эле пакете жеткиликтүү. Модификатор explicitly көрсөтүлбөйт.
private: гана ошол эле класс ичинде жеткиликтүү.
| Модификатор | Класс | Пакет | Подкласс (пакеттен тышкары) | Ар бир класс (пакеттен тышкары) |
|---|---|---|---|---|
public |
Ооба | Ооба | Ооба | Ооба |
protected |
Ооба | Ооба | Ооба | Жок |
| Default | Ооба | Ооба | Жок | Жок |
private |
Ооба | Жок | Жок | Жок |
Көрүнүмдүүлүк модификаторлорун түшүнүү класс элементтерине көзөмөлдөөнү жана ишенимдүү код түзүүнү жеңилдетет.
Модификаторлордун мисалы:
// com.example.package1 пакетиндеги A класс
package com.example.package1;
public class ClassA {
public int publicVar;
protected int protectedVar;
int defaultVar; // Дефолт модификатор
private int privateVar;
public void publicMethod() {
// Бардык өзгөрмөлөргө жана методдорго жетүүгө болот
System.out.println("ClassA ичиндеги public метод");
}
protected void protectedMethod() {
System.out.println("ClassA ичиндеги protected метод");
}
void defaultMethod() {
System.out.println("ClassA ичиндеги default метод");
}
private void privateMethod() {
System.out.println("ClassA ичиндеги private метод");
}
public void accessMembers() {
publicVar = 1;
protectedVar = 2;
defaultVar = 3;
privateVar = 4; // ОК, класс ичинде жеткиликтүү
privateMethod(); // ОК, класс ичинде жеткиликтүү
}
}
// ClassB ошол эле пакете com.example.package1 ичинде
package com.example.package1;
public class ClassB {
public void accessClassAMembers(ClassA objA) {
objA.publicVar = 10; // ОК, public
objA.protectedVar = 20; // ОК, protected (ошол эле пакет)
objA.defaultVar = 30; // ОК, default (ошол эле пакет)
// objA.privateVar = 40; // Компиляция ката, private
objA.publicMethod(); // ОК, public
objA.protectedMethod(); // ОК, protected (ошол эле пакет)
objA.defaultMethod(); // ОК, default (ошол эле пакет)
// objA.privateMethod(); // Компиляция ката, private
}
}
// ClassC башка пакете com.example.package2 ичинде
package com.example.package2;
import com.example.package1.ClassA;
public class ClassC extends ClassA { // ClassC ClassAнын подклассы
public void accessClassAMembersFromSubclass() {
publicVar = 100; // ОК, public
protectedVar = 200; // ОК, protected (подкласс, дагы башка пакеттерде)
// defaultVar = 300; // Компиляция ката, default (башка пакет)
// privateVar = 400; // Компиляция ката, private
publicMethod(); // ОК, public
protectedMethod(); // ОК, protected (подкласс, дагы башка пакеттерде)
// defaultMethod(); // Компиляция ката, default (башка пакет)
// privateMethod(); // Компиляция ката, private
}
}
// ClassD башка пакете com.example.package2 ичинде (ClassAнын подклассы эмес)
package com.example.package2;
import com.example.package1.ClassA;
public class ClassD {
public void accessClassAMembers(ClassA objA) {
objA.publicVar = 1000; // ОК, public
// objA.protectedVar = 2000; // Компиляция ката, protected (башка пакет, подкласс эмес)
// objA.defaultVar = 3000; // Компиляция ката, default (башка пакет)
// objA.privateVar = 4000; // Компиляция ката, private
objA.publicMethod(); // ОК, public
// objA.protectedMethod(); // Компиляция ката, protected (башка пакет, подкласс эмес)
// objA.defaultMethod(); // Компиляция ката, default (башка пакет)
// objA.privateMethod(); // Компиляция ката, private
}
}