Public, Private, Protected

Public, private, protected

Public, Private, Protected

 “Access Modifier”ları, Türkçe’siyle erişim koruma niteleyicileri, bir sınıfın bir metoduna veya bir değişkenine, diğer deyişle, bir sınfın malına kimlerin erişebileceğini belirleyen kelimelerdir. Java dört seviyede erişim koruması sağlar. İşin kafa karıştırıcı yönü ise bu dört seviyenin üç farklı isimle adlandırılmasıdır. Peki dördüncü nasıl adlandırılıyor diyorsanız, Bir sınıf öğesine erişim koruması atamazsanız o varsayılan (default) erişim korumasına sahip olur. Diğer koruma niteleyicileri public, protected ve private’tır.

Öncelikle temel bir sınıf üzerinden örnek verelim

public, private, protected

Temel sınıfında dört farklı seviyeden dört farklı değişken tanımladık. konsolaBasDaBirGörelim metodu da bu dört değişkeni konsola yazdırma görevini üstlendi. Görüldüğü üzere erişim seviyeleri farklı olsa da sınıfın içinden değişkenlere erişmede bir farklılık, sıkıntı yaşanmadı. Erişim niteliyecileri, bu sınıfın dışındaki sınıflardan bu sınıfa olan erişimi kısıtlar. Sınıf içi erişimi kısıtlama gibi bir durum söz konusu değildir.

 Şimdi yeni bir sınıf yaratalım ve bu sınıftan Temel sınıfına yerleştirelim

public, private, protected

Görüldüğü gibi dışarıdaki bir sınıf Temel sınıfının şahsi (private) malları hariç tüm malları erişebilmektedir. ŞahsiMal değişkenine erişmek istediğimizde derleyici hata vermektedir. Temel’in korunaklı mallarına tüm sınıfların erişmesi doğal değildir. Dursun, Temel ile aynı paketten bir sınıf olduğundan dolayı böyle bir geniş erişime sahiptir. Şimdi farklı bir pakette bir sınıf ile erişmeye çalışalım.

public, private, protected

Temel ve Dursun sınıfları accessModifierTestA paketindelerdi. Yukarıdaki John sınıfını ise accessModifierTestB paketinde tanımladık. Görüldüğü üzere John, Temel’in sadece kamu yani public değişkenlerine erişebilmektedir. Dolayısıyla bir tablo yaparsak;

public, private, protected

Kalıtım

Şimdi Temel sınıfıyla aynı pakette tanımlanmış bir altsınıfla (subclass) ile yapalım

public, private, protected.

 

Görüldüğü üzere, aynı paketteki alt sınıf olan UşakA Temel’den kalıtımla aldığı öğelerden sadece şahsi (private) üyelere erişememektedir. Public, private ve default seviyelerine erişim serbesttir.

 

Şimdi aynı örneği accessModifierTestB paketinde tanımlayacağımız UşakB’nin Temel’in hangi üyelerine erişebileceğine bakalım.

public, private, protected

 

UşakB’e Temel’den devraldığı public ve protected üyelere erişimde sıkıntı yaşamamaktadır. Öte yandan default ve private erişim seviyelerine erişememektedir.

 

Dolayısıyla demin hazırladığımız tabloyu güncellersek;

public, private, protectedDikkatli okuyucular hemen UşakA, UşakB örnekleriyle Dursun, John örnekleri arasında önemli bir farkı yakalamıştır. Dursun ve John örneklerinde Temel nesnesine yaratılıp dışarıdan erişim yapılmaktadır. Öte yandan UşakA ve UşakB ise Temel kalıtımla devraldıkları üyeleri erişmektedir. Elbette Dursun ve John, Temel’den türemediği için onlarda böyle bir kalıtım söz konusu değildir. Öte yandan, UşakA ve UşakB, aynı Dursun ve John gibi bir Temel nesnesi yaratıp herhangi bir nesneye erişir gibi Temel nesnesine erişebilir. Acaba bu durumda, erişim kısıtlamaları nasıl çalışmaktadır? Beraber bunun cevabını alalım.

public, private, protected

UşakA için görüldüğü üzere değişen bir durum yoktur. Hatırlayacak olursanız, Dursun’un erişim hakları da UşakA’nın erişim haklarıyla aynıydı. Dolayısıyla aynı paketteki sınıflar için değişen bir kural yoktur. İster temel bir sınfın alt sınıfı olsun, isterse başka bir sınıf, aynı paketteki tüm sınıfların public, protected ve default tüm üyelerine erişebilir.

 

public, private, protected

UşakB için ise değişen bir durum vardır. UşakB, Temel’den devraldığı korunaklı mallara (protected) erişebildiği halde, yarattığı başka bir Temel nesnesinin sadece kamu mallarına (public) erişebilmektedir. Hatırlatacak olursak, her sınıf gibi John sınıfı da sadece Temel’in kamu üyelerine erişebilmektedir. Dolayısıyla bu durum için UşakB ile John arasında bir faklılık bulunmamaktadır.

 

Sonuç

 

1.      Bir sınıfın private (şahsi) üyelerine sadece sınfın kendisi erişebilir.

2.      Aynı paketteki sınıflar birbirlerinin private (şahsi) üyeleri dışında tüm üyelerine erişebilir.

3.      Farklı paketteki bir sınıfın sadece public (kamu) üyelerine erişilebilir. Buna tek istisna, farklı paketteki bir sınıftan türeyen sınıflar içindir. Alt sınıflar, kalıtımla geçen protected (korunaklı) üyelere de erişebilir.

 

public, private, protected

 

Yorumunuzu Ekleyin
Public, Private, Protected Yorumları +13 Yorum
  • Neyzen fatih
    1
    Neyzen fatih
    Allah razı olsun ... konu dediğin böle anlatılır
    teşekkür ederim ...
    16 Eylül 2009 17:43:50, Çarşamba
  • cagdas
    1
    cagdas
    tebrikler
    15 Nisan 2010 18:09:09, Perşembe
  • erol
    1
    erol
    emeğine sağlık dostum süper olmuş....
    01 Haziran 2011 23:00:55, Çarşamba
  • burak güder
    1
    burak güder
    Çok orjinal olmuş tebrik ederim :
    19 Ekim 2011 16:21:39, Çarşamba
  • Fikret
    1
    Fikret
    Mükemmel bir makale elinize sağlık
    21 Kasım 2011 23:20:24, Pazartesi
  • emre
    1
    emre
    Güzel bir makale. Elinize sağlık. Öte yandan neden public kullanırız neden private kullanırız konusuna açıklık getirmek amacıyla bir ekleme yapılabilir.
    19 Nisan 2013 13:44:52, Cuma
  • Can Eryavuz
    1
    Can Eryavuz
    Konu anlatımı için teşekkürler, faydalı ve sade olmuş.
    07 Mayıs 2013 10:19:11, Salı
  • BURAK
    1
    BURAK
    çok iyi olmuş o grafikler
    10 Nisan 2014 02:00:24, Perşembe
  • İdil Aytürk
    1
    İdil Aytürk
    Çok eğlenceli ve açıklayıcı bir anlatım gerçekten bayıldım :D
    12 Şubat 2015 00:42:34, Perşembe
  • Semih ( Software Eng)
    1
    Semih ( Software Eng)
    Kardeşim şu cümlende bir yanlışlık var sanırsam : "Görüldüğü üzere, aynı paketteki alt sınıf olan UşakA Temel?den kalıtımla aldığı öğelerden sadece şahsi (private) üyelere erişememektedir. Public, private ve default seviyelerine erişim serbesttir."



    Doğrusu : " Public, PROTECTED ve default seviyelerine erişim serbesttir."
    21 Ocak 2016 23:58:49, Perşembe
  • JavaCoder
    1
    JavaCoder
    Çok teşekkür ederim acıklayıcı ve net bi anlatım kitabınız varsa almak isterim
    22 Ocak 2016 13:31:38, Cuma
  • ayse
    1
    ayse
    cok tesekkürler! daha iyi anlamak icin türkce kaynaklara baktigimda, daha cok anlamiyorum cünkü direkt tercüme cogu. ama sizin ki gercekten anlasilir, cok sagolun
    20 Mart 2018 21:31:39, Salı
  • Qismet
    1
    Qismet
    Çox sağolun konu böyle anlatılır ancaq

    17 Ekim 2019 13:19:12, Perşembe


Yükleniyor...
Yükleniyor...