Junior
Java programlama bağlamında görünürlük nedir?
sobes.tech yapay zeka
AI'dan gelen yanıt
Java bağlamında görünürlük (aynı zamanda görünürlük alanı olarak da adlandırılır), bir değişkenin, metodun, yapıcı metodun veya sınıfın programın diğer bölümlerinden erişilebilirliğini belirler. Bu, erişim belirteçleriyle kontrol edilir.
Java'da dört seviyede görünürlük vardır:
public: Paket içinde ve dışında herhangi bir yerden erişilebilir.protected: Aynı paket içinde ve alt sınıflarda (başka paketlerde bile) erişilebilir.- Varsayılan mod (default veya package-private): Sadece aynı paket içinde erişilebilir. Açıkça bir belirteçle belirtilmez.
private: Sadece aynı sınıf içinde erişilebilir.
| Belirteç | Sınıf | Paket | Alt sınıf (paket dışı) | Herhangi bir sınıf (paket dışı) |
|---|---|---|---|---|
public |
Evet | Evet | Evet | Evet |
protected |
Evet | Evet | Evet | Hayır |
| Varsayılan | Evet | Evet | Hayır | Hayır |
private |
Evet | Hayır | Hayır | Hayır |
Görünürlük belirteçlerinin kullanımı, kapsülleme ve programa erişim kontrolünde önemli bir rol oynar.
Görünürlük belirteçlerinin kullanımına örnek:
// com.example.package1 paketinde A sınıfı
package com.example.package1;
public class ClassA {
public int publicVar;
protected int protectedVar;
int defaultVar; // Varsayılan belirteç
private int privateVar;
public void publicMethod() {
// ClassA sınıfındaki tüm değişkenlere erişebilir
System.out.println("ClassA'daki genel yöntem");
}
protected void protectedMethod() {
System.out.println("ClassA'daki korumalı yöntem");
}
void defaultMethod() {
System.out.println("ClassA'daki varsayılan yöntem");
}
private void privateMethod() {
System.out.println("ClassA'daki özel yöntem");
}
public void accessMembers() {
publicVar = 1;
protectedVar = 2;
defaultVar = 3;
privateVar = 4; // Tamam, sınıf içinde erişim
privateMethod(); // Tamam, sınıf içinde erişim
}
}
// Aynı paketteki B sınıfı
package com.example.package1;
public class ClassB {
public void accessClassAMembers(ClassA objA) {
objA.publicVar = 10; // Tamam, genel
objA.protectedVar = 20; // Tamam, korumalı (aynı paket)
objA.defaultVar = 30; // Tamam, varsayılan (aynı paket)
// objA.privateVar = 40; // Derleme hatası, özel
objA.publicMethod(); // Tamam, genel
objA.protectedMethod(); // Tamam, korumalı (aynı paket)
objA.defaultMethod(); // Tamam, varsayılan (aynı paket)
// objA.privateMethod(); // Derleme hatası, özel
}
}
// Farklı paketteki C sınıfı
package com.example.package2;
import com.example.package1.ClassA;
public class ClassC extends ClassA { // ClassC, ClassA'nın alt sınıfıdır
public void accessClassAMembersFromSubclass() {
publicVar = 100; // Tamam, genel
protectedVar = 200; // Tamam, korumalı (alt sınıf, başka paketlerde bile)
// defaultVar = 300; // Derleme hatası, varsayılan (başka paket)
// privateVar = 400; // Derleme hatası, özel
publicMethod(); // Tamam, genel
protectedMethod(); // Tamam, korumalı (alt sınıf, başka paketlerde bile)
// defaultMethod(); // Derleme hatası, varsayılan (başka paket)
// privateMethod(); // Derleme hatası, özel
}
}
// Farklı paketteki D sınıfı (ClassA'nın alt sınıfı değil)
package com.example.package2;
import com.example.package1.ClassA;
public class ClassD {
public void accessClassAMembers(ClassA objA) {
objA.publicVar = 1000; // Tamam, genel
// objA.protectedVar = 2000; // Derleme hatası, korumalı (başka paket, alt sınıf değil)
// objA.defaultVar = 3000; // Derleme hatası, varsayılan (başka paket)
// objA.privateVar = 4000; // Derleme hatası, özel
objA.publicMethod(); // Tamam, genel
// objA.protectedMethod(); // Derleme hatası, korumalı (başka paket, alt sınıf değil)
// objA.defaultMethod(); // Derleme hatası, varsayılan (başka paket)
// objA.privateMethod(); // Derleme hatası, özel
}
}
Görünürlüğü anlamak, daha güvenilir ve modüler kodlar oluşturmaya yardımcı olur, sınıfların iç detaylarına istenmeyen erişimi sınırlar.