ProgramlamaJava Geliştirici

Java'da protected erişim belirleyicisinin nasıl çalıştığını, diğer belirleyicilerden farkını ve yanlış anlaşıldığında hangi hataların yapılabileceğini açıklayın.

Hintsage yapay zeka asistanı ile mülakatları geçin

Cevap.

protected erişim belirleyicisi, sınıf üyelerinin aynı paket içinde ve diğer paketlerdeki alt sınıflar içinde görünür olmasını sağlar.

Diğer belirleyicilerle farklılıklar:

  • private — sadece mevcut sınıf içinde erişim
  • default (belirleyici olmadan) — sadece mevcut paket içinde erişim
  • protected — mevcut paket içinde ve paket dışında miras alınan sınıflara erişim
  • public — her yerde erişim

Örnek:

package com.example.base; public class Parent { protected void sayHello() { System.out.println("Hello from parent"); } } package com.example.child; import com.example.base.Parent; public class Child extends Parent { public void tryHello() { sayHello(); // Erişim var! } } public class NotChild { public void fail(Parent p) { // p.sayHello(); // Hata: erişim yok } }

Ters Köşe Soru.

Dış sınıf (miras alan sınıf değil) başka bir paketteki protected metoda, bu sınıfın nesnesine sahip olarak erişebilir mi?

Cevap: Hayır, başka bir paketteki protected metoda erişim sadece miras alan sınıflara izin verilir ve yalnızca this veya miras alan nesnenin referansı üzerinden yapılabilir, ana sınıf referansı ile değil.

Parent p = new Child(); p.sayHello(); // Hata! ((Child) p).sayHello(); // Başarılı (eğer Child içinde erişiliyorsa)

Konunun inceliklerinden dolayı gerçek hata örnekleri.


Hikaye

Büyük bir modüler projede, bir geliştirici önemli iş yöntemlerini protected bölümüne yerleştirdi, ve bunun dış pakette erişilemeyeceğini düşündü. Diğer geliştiriciler bu yöntemleri aynı pakette testlerinde yanlışlıkla kullandılar ve sınıfların daha sonra taşınması sonucu beklenmedik erişim hataları oluştu.


Hikaye

Mikroservisler projesinde, protected erişime sahip bir metod, başka bir pakette ana tür referansı üzerinden çağrılmaya çalışıldı — çağrı çalışmadı. Bu, sistemin genişletme mekanizmalarının bir kısmında sorun yarattı, çünkü erişim alanının yanlış anlaşılmasına dayanıyordu.


Hikaye

Açık kaynak kütüphanede korumalı alanlar dikkatle kullanılmadı, bu da çok geniş bir sınıf yelpazesine erişim sağladı, bu da nesnenin iç durumunu isteyerek bozarak üçüncü taraf uygulamalarında sorunlara yol açtı.