Junior
Čo je viditeľnosť v kontexte programovania v Jave?
sobes.tech AI
Odpoveď od AI
Viditeľnosť v kontexte Javy (tiež nazývaná rozsah viditeľnosti) určuje dostupnosť premennej, metódy, konštruktora alebo triedy z iných častí programu. Je riadená modifikátormi prístupu.
V Jave existujú štyri úrovne viditeľnosti:
public: Dostupné z akéhokoľvek miesta vo vnútri aj mimo balíka.protected: Dostupné v rámci toho istého balíka a v podtriedach (aj v iných balíkoch).- Predvolený režim (default alebo package-private): Dostupné iba v rámci toho istého balíka. Nie je explicitne označené modifikátorom.
private: Dostupné iba v rámci tej istej triedy.
| Modifikátor | Trieda | Balík | Podtrieda (mimo balíka) | Akákoľvek trieda (mimo balíka) |
|---|---|---|---|---|
public |
Áno | Áno | Áno | Áno |
protected |
Áno | Áno | Áno | Nie |
| Default | Áno | Áno | Nie | Nie |
private |
Áno | Nie | Nie | Nie |
Pochopenie viditeľnosti pomáha vytvárať spoľahlivejší a modulárnejší kód, obmedzujúc nechcený prístup k vnútorným detailom tried.
Príklad použitia modifikátorov:
// Trieda A v balíku com.example.package1
package com.example.package1;
public class ClassA {
public int publicVar;
protected int protectedVar;
int defaultVar; // Predvolený modifikátor
private int privateVar;
public void publicMethod() {
// Môže získať prístup ku všetkým premenným triedy ClassA
System.out.println("Public method in ClassA");
}
protected void protectedMethod() {
System.out.println("Protected method in ClassA");
}
void defaultMethod() {
System.out.println("Default method in ClassA");
}
private void privateMethod() {
System.out.println("Private method in ClassA");
}
public void accessMembers() {
publicVar = 1;
protectedVar = 2;
defaultVar = 3;
privateVar = 4; // OK, prístup v rámci triedy
privateMethod(); // OK, prístup v rámci triedy
}
}
// Trieda B v tom istom balíku com.example.package1
package com.example.package1;
public class ClassB {
public void accessClassAMembers(ClassA objA) {
objA.publicVar = 10; // OK, public
objA.protectedVar = 20; // OK, protected (ten istý balík)
objA.defaultVar = 30; // OK, default (ten istý balík)
// objA.privateVar = 40; // Chyba kompilácie, private
objA.publicMethod(); // OK, public
objA.protectedMethod(); // OK, protected (ten istý balík)
objA.defaultMethod(); // OK, default (ten istý balík)
// objA.privateMethod(); // Chyba kompilácie, private
}
}
// Trieda C v inom balíku com.example.package2
package com.example.package2;
import com.example.package1.ClassA;
public class ClassC extends ClassA { // ClassC je podtriedou ClassA
public void accessClassAMembersFromSubclass() {
publicVar = 100; // OK, public
protectedVar = 200; // OK, protected (podtrieda, aj v inom balíku)
// defaultVar = 300; // Chyba kompilácie, default (iný balík)
// privateVar = 400; // Chyba kompilácie, private
publicMethod(); // OK, public
protectedMethod(); // OK, protected (podtrieda, aj v inom balíku)
// defaultMethod(); // Chyba kompilácie, default (iný balík)
// privateMethod(); // Chyba kompilácie, private
}
}
// Trieda D v inom balíku com.example.package2 (NE podtrieda ClassA)
package com.example.package2;
import com.example.package1.ClassA;
public class ClassD {
public void accessClassAMembers(ClassA objA) {
objA.publicVar = 1000; // OK, public
// objA.protectedVar = 2000; // Chyba kompilácie, protected (iný balík, nie podtrieda)
// objA.defaultVar = 3000; // Chyba kompilácie, default (iný balík)
// objA.privateVar = 4000; // Chyba kompilácie, private
objA.publicMethod(); // OK, public
// objA.protectedMethod(); // Chyba kompilácie, protected (iný balík, nie podtrieda)
// objA.defaultMethod(); // Chyba kompilácie, default (iný balík)
// objA.privateMethod(); // Chyba kompilácie, private
}
}