Junior
Java программалоо контекстинде көрүнүштүүлүк эмне?
sobes.tech AI
AIден жооп
Java контекстинде көрүнүмдүүлүк (ошондой эле көрүнүмдүүлүк аймагы деп аталат) өзгөрмө, метод, конструктор же класска башка бөлүмдөрдөн жетүүнү аныктайт. Ал жеткиликтүүлүк модификаторлору аркылуу көзөмөлдөнөт.
Javaда төрт деңгээлдеги көрүнүмдүүлүк бар:
public: пакет ичинде жана сыртында каалаган жерден жеткиликтүү.protected: ошол эле пакете жана подклассларда (башка пакеттерде да) жеткиликтүү.- Дефолт режим (default же package-private): гана ошол эле пакете жеткиликтүү. Модификатор explicitly көрсөтүлбөйт.
private: гана ошол эле класс ичинде жеткиликтүү.
| Модификатор | Класс | Пакет | Подкласс (пакеттен тышкары) | Ар бир класс (пакеттен тышкары) |
|---|---|---|---|---|
public |
Ооба | Ооба | Ооба | Ооба |
protected |
Ооба | Ооба | Ооба | Жок |
| Default | Ооба | Ооба | Жок | Жок |
private |
Ооба | Жок | Жок | Жок |
Көрүнүмдүүлүк модификаторлорун түшүнүү класс элементтерине көзөмөлдөөнү жана ишенимдүү коду түзүүнү жеңилдетет.
Модификаторлордун мисалы:
// com.example.package1 пакетиндеги ClassA класс
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
}
}