Serkan Ayyıldız

Meraklı bir yazılım uzmanı...

Java Final Sınıf ve Property'ler

Java meraklısı yazılımcılara yeniden selamlar :)

Nesne yönelimli programlamayı Java programlama dilinde adım adım öğrendiğimiz bu makale dizimizde bugünkü konumuz final olacak.

1-Java Final Sınıflar

Bir önceki Java dersimizde interface'ler aracılığıyla oluşturduğumuz sınıflara kalıtım almayı öğrenmiş hatta ondan önceki dersimizde sınıftan sınıfa kalıtım almayı görmüştük.Ancak programlama dünyasında her ne kadar kalıtım alarak proje
geliştirmek güzel olsa bile bazı durumlarda sınıflarımızın alt sınıflara kalıtım vermesini istemeyebiliriz.Daha doğrusu o sınıfın tek başına kullanılmasını isteyebiliriz.

Mesela İnsan sınıfından kalıtım alarak öğrenci sınıfını oluşturmak yerine sadece öğrenci sınıfını kullanarak bu sınıfa ait property (özellik) ve metotları kullanmayı isteyebiliriz ancak öğrenci sınıfından kalıtım alabilecek başka bir eğitim kıdem seviyesi olmayacağı için öğrenci sınıfı başka herhangi bir sınıfa kalıtım verememeli.
İşte böyle durumlar için final deyimini kullanarak sınıfımızın kalıtım vermesini engelleriz.Şimdi NetBeans IDE'mizi açalım ve yukarıda bahsettiğimiz gibi öğrenci classını oluşturalım:

Java-Final-Sınıf

Dikkat ettiğiniz gibi sınıfımızın adının hemen soluna final anahtar kelimesini ekledik,şimdi ise öğretmen isimli boş bir sınıf oluşturalım ve öğrenci sınıfından extends anahtar sözcüğüyle kalıtım almaya çalışalım:

Java-final

NetBeans'in bize iletmek istediği mesaj ise kalıtım vermeyen final deyimiyle kapatılan bir sınıftan kalıtım alınamayacağıdır.O halde diyoruz ki; bir sınıf başka sınıflara kalıtım vermeyecek şekilde tasarlanıyorsa final deyimiyle kalıtım verme özelliği kapatılır..

Final olarak tanımlanan bir Java sınıfını tıpkı C# programlama dilindeki sealed (mühürlü) sınıflara benzetebiliriz.

Final deyimi yalnızca sınıflara değil sınıfların üyelerine de tanımlanabilir.Öyle ki metotlara,metotların parametrelerine ve property (özellik) lerine de tanımlanabilmektedir.Ancak henüz virtual-override konusunu öğrenmediğimiz için bu makalemizin devamında final property'leri göreceğiz...

2-Java Final Propertyler

Final deyimi sınıflara tanımlanarak nasıl o sınıfın kalıtım vermesini engelleyebiliyorsak benzer bir mantık ile sınıfın property'lerine de tanımlanabiliyor,ancak property'lerin doğrudan kalıtım konusuyla ilgisi olmadığı için burdaki tek farklılık bir sınıfın property'sinin değerinin kalıtım sonrası veya new ile instance (örnek kopya) oluşu esnasında değerinin değiştirilememesini sağlamaktır.
Yani final deyimiyle tanımlanan bir property'nin değeri en başından verilir ve bir daha asla değiştirilemez.

Bunu C# programlama dilindeki yalnızca get deyimi alan property'ye benzetebiliriz,sınıfımızı oluştururken bir property tanımlanır ve constructor (yapıcı) metot esnasında o property'ye değer verilir.Daha sonra yazılımcı o sınıftan ister kalıtım alsın ister new sözcüğüyle instance alsın değer asla değişmez.Tabi bu işlemi yapabilmek için yapıcı metotlar konusunu bilmemiz gerekiyor :)

Bir başka bilmemiz gereken nokta ise final olarak belirtilecek bir property'nin ait olduğu sınıfın final olarak tanımlanması gerekmediğidir.Demek ki final property final olmayan sınıf içerisinde de olabilir..

Lafı uzatmadan içecek isimli bir sınıf oluşturalım ve sınıfımızın string tipindeki MaddeCinsi isimli property'sini yapıcı metot içerisinde "sıvı" olarak tanımlayalım ki bu sınıftan instance ya da kalıtım alındığında içilecek olan maddeye daha sonra katı ya da gaz denilemesin :)

java-final-property

Final olarak tanımladığımız property'nin constructor metot içerisinde değerini tanımlamamızın sebebi ise, final olarak tanımlanmış property'lerine yalnızca sınıfın instance alımı esnasında değer ataması yapılabildiğidir.Bu demektir ki

Icecek icecek=new Icecek();

dediğimiz anda MaddeCinsi isimli property'mizin değeri o anda veriliyor demektir.

Property'lerden madde cinsine baktığımızda diğer property'lerden farklı olarak final olarak atandığını görüyoruz,o halde sınıfımızdan instance alalım ve diğer bütün property'leri değiştirdikten sonra madde cinsi isimli final tipindeki property'nin değerini değiştirmeye çalışalım:

java-final-özellik

Böylece içilecek olan maddenin yalnızca sıvı olabileceğini özellikle vurguluyor ve bu property'nin değerinin dışarıdan
değiştirilmesini engelleyebiliyoruz :)

Final deyimi kullanılarak sınıf ve property'lere nasıl uygulanabildiğini öğrenmiş olduk,bir sonraki Java makalemizde
kalıtım esnasında kullanılan virtual-override deyimlerini öğreneceğiz ve hemen bir sonraki Java makalemizde de kalıtım
verilen metotlarla ilgili final konusuna tekrar geri döneceğiz.

O yüzden bir sonraki makalemizde görüşmek üzere hoşçakalın esen kalın :)



Bir yorum bırak E-posta adresiniz yayınlanmayacaktır.

Menu