Sobes.tech
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:

  1. public: Paket içinde ve dışında herhangi bir yerden erişilebilir.
  2. protected: Aynı paket içinde ve alt sınıflarda (başka paketlerde bile) erişilebilir.
  3. Varsayılan mod (default veya package-private): Sadece aynı paket içinde erişilebilir. Açıkça bir belirteçle belirtilmez.
  4. 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.