Konular

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ı +12 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ı
Public, Void, Main, Static Nedir?

Public, void, main, static nedir?

66,437 Okunma 3 Yorum 30/10/2008 14:38:26

Java İle Neler Yapılabilir ?

60,511 Okunma 3 Yorum 04/11/2009 11:21:08

Java Değişken Tipleri

Byte, short, int, long, float, double, boolean, char, string

54,607 Okunma 0 Yorum 04/11/2009 13:11:31

Java Diziler

Javada diziler nesnedirler, cdeki gibi hafızada yer kaplayan pointer değillerdir. Javada diziler, cye göre daha güvenilirdir. Dizilerin elemanlarına gelişigüzel değerler atayamazsınız. Java, dizi elemanlarını sırasıyla kontrol eder. Dolayısıyla arada değer atanmamış bir elemana rastlanırsa hata oluşur. Bu da cde çıkan hafıza bozulmalarını önler. Javada dizi kullanmak için ilk önce dizinin tipi verilir. Tip verilirken dizinin büyüklüğü belirtilmez

51,979 Okunma 2 Yorum 19/11/2007 15:13:25

Java Class Yapısında Constructor Ve Overloading

51,867 Okunma 4 Yorum 09/03/2009 11:11:13

Javada Fonksiyonlar

Değer alan ve geriye değer döndüren fonksiyonlar

49,230 Okunma 0 Yorum 01/04/2010 14:39:09

Public, Static, Void, Protected, Friendly, Private Nedir?

47,326 Okunma 1 Yorum 25/10/2007 14:38:38

Javada try catch Kullanımı

Javada İstisna Yakalama Mantığı

44,690 Okunma 0 Yorum 12/02/2010 12:59:07

Java Da Operatörler

Aritmetik operatorler 4 işlem ve mod, arttırma operatorleri, ilişkisel operatorler, mantıksal operatorler, kısa devre mantıksal operatorler

36,454 Okunma 0 Yorum 02/12/2009 13:58:19

Javada Try-catch-finally Ve Throw, Throws Kullanımı

Javada try-catch-finally ve throw, throws kullanımı detaylı anlatım

36,128 Okunma 0 Yorum 04/03/2010 09:34:25

Stringleri Karşılaştırma

Stringler bilinen = operatörleri ile karşılaştırılmazlar, ayrıca == ve != operatörleride stringler içindeki karakterleri karşılaştırmazlar

35,522 Okunma 0 Yorum 18/10/2007 12:43:49

Java Da Break Ve Continue Kullanımı

35,277 Okunma 0 Yorum 15/01/2010 08:21:28

Java Class Yapısında Miras İnheritance Ve Uzatma Extends İşlemleri

34,533 Okunma 6 Yorum 15/01/2010 08:36:41 07/12/2013 21:52:44

Javada Class Tanımlama

Class

34,024 Okunma 0 Yorum 19/03/2009 09:33:19

Jre Jdk Jvm Nedir?

Jre jdk jvm nedir

30,994 Okunma 3 Yorum 15/10/2009 14:14:25

Javada Temel Değişkenler Ve Tip Dönüşümleri Tostring, Parseint, Equals, Final Terimi

Bu başlık altında javada temel değişkenler ve tip dönüşümleri tostring, parseint, equals, final terimi anlatacağım.

30,851 Okunma 1 Yorum 24/11/2008 15:01:37

J2ee, j2se, j2me Nedir?

J2ee,j2se,j2me hakkında bilgi

30,386 Okunma 1 Yorum 21/10/2009 17:00:15 16/07/2014 17:00:35

Java Terimleri

Java, birbirinden farklı aygıtlarda çalışabilen, bu aygıtlar arasında iletişimi kolay hale getiren programlama dili ve platformudur. Java diliyle yazılmış programlar, Windows, UNIX, Mac işletim sistemi yüklü bilgisayarlarda hiç bir değişiklik yapmayı gerektirmeden çalışabilmektedirler

30,310 Okunma 0 Yorum 16/10/2007 13:23:36

Java'da Table Bileşeni Kullanımı

Swing'in JTable nesnesi ve TableModel kullanımına ilişikin bir yazı

28,604 Okunma 0 Yorum 26/01/2009 22:19:34

Class Ve Fonksiyon Farkları, Program Yazma Standartları Ve Yazma Kuralları

Class ve fonksiyon nedir, program yazma standartları ve kuralları...

27,640 Okunma 0 Yorum 30/10/2008 14:39:19

Javada Diziler

Java da diziler nesnedir; içerisinde belirli sayıda eleman bulunur. Eğer bu sayı sıfır ise, dizi boş demektir. Dizinin içerisindeki elemanlara eksi olmayan bir tam sayı ile ifade edilen dizi erişim indisi ile erişilir. Bir dizide n tane eleman varsa dizinin uzunluğu da n kadardır; ilk elemanın indisi/konumu 0’dan başlar, son elemanı ise n-1’dir.

27,147 Okunma 1 Yorum 14/04/2008 11:01:20

for Döngüsü

25,873 Okunma 0 Yorum 30/12/2009 11:02:00

Javada While, Do While Ve For Döngüleri

25,676 Okunma 1 Yorum 15/01/2010 01:32:16 22/01/2016 01:33:10

Java Programlamada Paket Yapısı Ve Import

Java programlamada paket yapısı ve import

24,526 Okunma 0 Yorum 16/04/2009 10:59:26

Java 3D

Son yıllarda çoklu ortamda ilerleme kaydeden Java, Java3D ile yüksek performans isteyen üç boyutlu grafiklerde de 'Ben varım!' diyor.

24,053 Okunma 0 Yorum 26/01/2009 22:23:10

while döngüsü

Dizilerin olmazsa olmazı

24,003 Okunma 0 Yorum 17/12/2009 10:53:28

Java Operatörleri

Mod Operatörü, Aritmetik Atama Operatörü, Arttırma Azaltma Operatörleri, Iliskisel Operatorler ve Kısa Devre Iliskisel Operatörler, Kısa devre iliskisel operatorler, ? Operatoru

23,791 Okunma 0 Yorum 04/12/2009 12:11:34

Javada Geometrik Şekillerin Hacmini Hesaplayan Uygulama

22,814 Okunma 1 Yorum 14/01/2010 10:26:28

Javada İlk Kod

Java classpath tanımlamaları, consolda ilk program yazılması, derlenmesi, çalıştırılması aynı uygulamanın netbeansta yapılışı ve class, java ve jar dosyalarının gösterilmesi

22,586 Okunma 0 Yorum 27/10/2008 22:00:38

Sınıfları baska bır sınıfta nesne olarak çagırarak bir araya getirme (Composition)

Aynı paket içersindeki klas yapılarına kolay erişimi sağlayan bir uygulama

21,987 Okunma 0 Yorum 16/03/2009 12:32:04

Yükleniyor...