Merhaba yeni Java Dersimizde Erişim Belirleyiciler Nedir, Nasıl Kullanılır? Konularından bahsedeceğiz. Ayrıca bu makale Nesne Tabanlı Programlamanın ilk konusudur ve sonraki derslerde devamı gelecektir. Java dilinde nitelemelere de bu konu boyunca değineceğiz. Kafanızın karıştığı yerler olursa üzülmeyin konu içerisinde kalıtım gibi konulardan bahsettim ileri derslerde işlenecektir.
İçindekiler
- Erişim Belirleyiciler (Access Modifiers) Nedir?
- Erişim Belirleyiciler (Access Modifiers) Neden Kullanılır?
- Nasıl Kullanılır?
- Public (Erişim Serbest)
- Protected (Korumalı)
- Private (Saklı – Sınıfa Özel)
- Default (Friendly)
- Kısaca static Anahtar Kelimesi Nedir?
- Kısaca final Anahtar Kelimesi Nedir?
- Paket Bildirimi
Erişim Belirleyiciler (Access Modifiers) Nedir?
Bir Java öğesinin(değişken, metot, sınıf vb) bildirimi yapılırken, o öğeye kimlerin erişebileceğini belirtme olanağı vardır. Bu eylemi gerçekleştiren anahtar sözcüklere Erişim Belirleyiciler (Access Modifiers, Access Levels) denir. Aşağıdaki tabloda bunları görebiliriz.
Erişim Belirleyici | Açıklama |
public | Halka Açık olarak çevrilebilir. Bu niteleme sahip olan öğelere her yerden erişilebilir. |
protected | Aynı paket ve başka paket içerisinde tanımlanan alt sınıflardan erişilebilir. Başka paketlerden erişilemez. |
doğal(default, friendly) | Erişim belirtici yoksa, aynı sınıf ve aynı paket içerisinden erişilebilir. Başka paketlerden erişilemez. |
private | Özel mülkiyet olarak çevrilebilir. Yalnızca aynı sınıftan erişime izin verir. |
Erişim Belirleyiciler (Access Modifiers) Neden Kullanılır?
Erişim kısıtlarını değişkenler, metotlar ve sınıflar için sık sık kullanırız. Bunun asıl nedeni kodlarımız arasındaki erişim dengesini sağlayıp neye nereden erişim izni vereceğimizi belirlemekten geçiyor. Bu sayede kapalı bir sınıfa dışarıdan erişim olmaz yalnızca izin verdiğimiz kısımlar görünürde olur. Özellikle projeler için kütüphaneler yazarken oldukça işimize yarar.
Nasıl Kullanılır?
Herhangi bir değişkenin veya metodun önüne yazarak kullanabiliriz. Metot içerisindeki değişkenlere erişim belirleyici veremeyiz. Aşağıda örnek hem erişim belirleyici kullanmayı gösterdim hem de sürekli gördüğümüz sınıf ve metot (main) kavramlarında neden yer aldıklarını açıkladım.
Public (Erişim Serbest)
Nitelediği değişken, metot, sınıf vb. programda yer alan bütün paketlere açık olur. Yani dileyen erişip kullanabilir. Hemen yukarıdaki örnekte yer alan sayı isimli değişken istendiği yerden çağrılabilir ve kullanılabilir. O nedenle kodlamada önemli ve erişilmesini istemediğiniz alanları public yapmamanız gerekir. Kısıtsız erişim için public kullanılır.
Protected (Korumalı)
Bir sınıf içerisindeki değişkenlere ve metotlara dış alt sınıflardan erişebilmesini ama başka paketlerin erişmesini engellemek amacıyla kullanılır. Sonraki derslerde göreceğimiz kalıtım konusunda alt sınıflar üst sınıfların özelliklerini kalıtımla alır. Biz burada üst sınıfın özelliklerini protected yaparsak kalıtım dışında özelliklerin alınmasını engelleriz. Aşağıdaki protected örneğini inceleyelim.
Yukarıdaki örnek kafanızı karıştırmış olabilir çünkü henüz bu konuları görmedik. Kısaca Baba isimli bir sınıf oluşturup ona protected özellikler (değişkenler) ve protected bir metot verdik. Çocuk isimli sınıfı extends ile babadan miras alıyoruz, kısaca babanın özelliklerine erişim izni aldık. Son olarak main() metodumuz içerisinde Çocuk sınıfından nesne oluşturup bu özelliklere eriştiğimizi görebiliyoruz. Özellikleri sadece alt sınıfların erişimine açmak istersek protected iyi bir nitelemedir.
Private (Saklı – Sınıfa Özel)
Bazı değişken, metot ya da sınıflara erişimi tamamen kapatmak isteyebiliriz. Bunun açıkça nedeni o değişkenler veya metotlarla sadece sınıf içerisinde işlemler yürütülmesi olabilir. private nitelemesi public nitelemesinin karşıtıdır. İleri ki konularda göreceğimiz kapsülleme (Encapsulation) buna güzel bir örnektir. Şimdi örneğimizi görelim.
Yukarıdaki protected örneğinin aynısını yaptık fakat buradaki fark Baba sınıfı içerisinde yer alan özelliklerin (değişkenlerin) private nitelemesine sahip olması bu private değişkenlere yalnızca Baba sınıfı içerisinden erişilebiliyor. Babayı miras alan Çocuk sınıfı protected olan dil() metodu dışında private değişkenlere erişemiyor. Burada private ile protected arasındaki farkı da görebilirsiniz.
Default (Friendly)
Diğerlerinden farklı olarak bunun bir anahtar kelimesi yoktur. Hiç bir erişim belirtkesi koymazsak ona default veya friendly öğe diyoruz. Doğal nitelemeli öğelere sınıftan, dış alt sınıflardan ve aynı paket içerisinden erişilebilir. Bir örnek yaparak konuyu anlayalım.
Yukarıdaki örnek protected ve private nitelemelerinde kullandığımız örnek aynı örnekteki değişimlere bakarak konunun daha iyi kavranacağını düşünüyorum. Öncelikle Baba sınıfı içerisinde yer alan özellikleri (değişken) ve metodu default yani Erişim Belirleyicisiz bıraktık. sacRengi özelliğini static yaptık bunun sebebi mainden erişildiğini göstermek. Daha sonra örnekte görüldüğü gibi her yerden rahatlıkla erişim yapabildik sadece dış paketlerden erişilemez durumdalar.
Kısaca static Anahtar Kelimesi Nedir?
Bir sınıftaki değişken ve metotları niteler. Nitelediği değişken veya metot nesnesi oluşturulmaya gerek olmaksızın kullanılabilir. Yukarıda Çocuk sınıfının değişkenlerine erişebilmek için Nesne oluşturuyorduk. İşte buna gerek kalmaması için static olarak nitelendiririz ve rahatlıkla erişim sağlayabiliriz.
Kısaca final Anahtar Kelimesi Nedir?
Değişken, metot ve sınıfları sabitler. Nitelediği öğeler programın ömrü boyunca sabitlenir değiştirilemez. Örneğin Pi sayısını 3,14 değerine sabitleyip bir daha değiştirilmemesini sağlayabiliriz. Bu sayede önem taşıyan verilerin değerleri sabitlenmiş olur. Aşağıdaki örneği inceleyebilirsiniz.
Yukarıda Java da yer alan tüm Erişim Belirleyicileri görebilirsiniz. Class (Sınıf), Class Veriables (Sınıf Özellikleri – Değişkenleri), Methods (Metotlar), Method Veriables (Metot Değişkenleri) alanlarına ayrılmış. Bunların kuralları şöyledir.
- Metotlar alabilecekleri public, protected, private ve default
- Sınıflar hem abstract hem final olamaz
- Abstract metot şu nitelemeleri alamaz: private, static, final, native, strictfp, synchronized.
- Metotlar native ve strictfp nitelemesini aynı anda alamaz.
- abstract ve native metotların gövdesi yoktur.
- Abstract metot içeren sınıf abstract nitelemesi almalıdır.
- final değişkenler volatile nitelemesi alamaz.
Paket Bildirimi
Paketler yalnızca doğal erişime sahiptir, başka erişim belirtkesi alamazlar. Paket içerisindeki her sınıf pakette olan her değişkene ve metoda erişebilir. Ama başka paketlerdeki sınıflar bunlara erişemez. Paket her kod örneğimizde gördüğünüz en tepede yer alan package ile başlayan bir tanımdır. Bu sayede kodlar arası hiyerarşi sağlanıp yetki dereceleri ayarlanabilir.
Bugünkü Java Dersinde oldukça fazla konuya değindik umarım faydalı olmuştur. Kafanızı karıştırabilecek nitelemelere ve kalıtım gibi konulara fazla takılmayın zaten ileri derslerde oldukça fazla işlenecektir. Bir sonraki dersimizde görüşmek üzere iyi günler dilerim.