JAVA INNER CLASS (İÇ İÇE SINIFLAR)

Herkese merhaba, bugün Java Dünyasında ‘Çoklu Kalıtım’ ve ‘Dahili Sınıflar’ hakkında biraz konuşalım. Bildiğiniz üzere Java’da çoklu katılım yoktur. Yani bir sınıf birden çok sınıfı inheritence(kalıtım) yoluyla “extends” edip kullanmaz. Sadece bir tane sınıfı extends edip kullanabilir. Buna karşılık interface’ler ise istenildiği kadar implements edilip kullanılabilir. İşte Java’da çoklu kalıtım arayüzler(interface) ve dahili sınıflar(inner class) ile sağlanır. Biz bu yazımızda inner classlar üzerinde duracağız.

Java’da üç çeşit inner class vardır:

Dahili Üye Sınıflar (static dahili üye, static olmayan dahili üye )

Yerel Sınıflar

İsimsiz Sınıflar

DAHİLİ ÜYE SINIFLAR

Dahili üye sınıflar, sınıf içinde tanımlanmış sınıflardır. Dahili üye sınıflar sayesinde parçalar bir araya gelerek bütünü oluştururlar.

Dahili sınıfa direkt olarak erişip nesne oluşturamayız, üst sınıf üzerinden erişmeliyiz.

Dahili üye sınıflar, normal sınıflar gibi erişim belirteçlerine (public,protected,private vb.) sahip olabilir. Belirteçleri ne olursa olsun, üst sınıf dahili sınıfın her şeyine erişir. Bir dahili sınıf ‘private’ tanımlanmış ise bu sınıfa erişim sadece üst sınıfından olur, diğer dahili sınıflar için kısıtlanır. Dahili üye sınıfını ‘static’ olarak tanımlarsak bu dahili sınıfın elemanlarına anaSınıf.dahiliSınıf şeklinde değilde doğrudan dahiliSınıf adı ile erişebiliriz.

Şimdi bir örnek üzerinden dahili sınıfların kullanımına bakalım.

Burada normal bir sınıfın içinde üç adet inner class bulunmakta. Biz yapmak istediğimiz işleri bu üç dahili sınıfa paylaştırdık. Ana sınıftan, dahili sınıflara nesne oluşturup onları kullandık.

Şimdi ise ‘static’ olarak tanımlanmış bir dahili sınıfın kullanımına bakalım.

NOT: Dahili üye sınıf yapılandırıcısında(constructor) gelen değerleri değişkenlere setlerken ‘this’ anahtar kelimesini kullanmayınız! Bunun yerine farklı isimlendirme daha sağlıklı olacaktır.

Şimdi ise dahili sınıflarda değişken tanımlamalarına bakalım.

Static olmayan dahili sınıf içerisinde static bir değişken ve metot tanımlayamadık. Fakat hem static hem de final olan değişkeni tanımlayabildik. Çünkü bu bir sabittir.

Static dahili siniflar içerisinde ise static olan ve olmayan metot ve değişkenler tanımlanabilir. Ayrıca static olan dahili sınıflar aynı static metotlar gibi, içerisinde bulunduğu sınıfın static olmayan elemanlarına erişemez. Fakat static olan alanlara erişebilir. Static olmayan dahili sınıflar ise, içerisinde bulunduğu sınıfın static olan ve olmayan alanlarına erişebilirler. Bunları da static metotlar gibi düşünebiliriz.

Şimdi ise kademeyi bir tık daha artıralım ve sınıf içerisinde sınıf ve bu sınıfında içerisinde bir sınıf yazalım 🙂

Java bu konuda çok esnektir. Bu da Java’nın artılarından bir tanesidir. 🙂

YEREL DAHİLİ SINIFLAR

Yerel sınıflar, metotların içerisinde tanımlanan sınıflardır. Nasıl ki dahili üye sınıfların kendini çevreleyen sınıfları varsa, dahili yerel sınıflarında kendilerini çevreleyen metotları vardır. Yerel sınıfların en önemli özelliği sadece o metot içerisinden erişilebilir olmalarıdır. Yani metot dışından bu sınıflara erişip bu sınıfları kullanmayız. Yerel sınıflar içerinde bulundukları metodun dışındaki arayüzlere erişebilirler. Yerel sınıfların erişim belirteçleri yoktur ve yapılandırıcıları olabilir.

Hemen örnek bir kod üzerinden anlatılanları inceleyelim.

Burada yapılanlar basitçe şudur; Faktöriyel hesabı yapacak olan bir metot, işlemleri kendi içerisindeki bir yerel sınıfa yaptırıyor, bu yerel sınıf işlem sonucunu metoduna döndürüyor. Metot da bize döndürüyor.

İSİMSİZ SINIFLAR

İsimsiz sınıflar(anonymous class) , isim kullanmadan tanımlanabilen sınıflardır. Bunlar bir isime sahip olmadıkları için yapılandırıcılar olmaz. Hemen bir örnek üzerinde gösterime devam edelim.

İsimsiz sınıflar çok kullanışlıdır. Android programlamada çok kullanılır. Buradaki örnekte faktoriyelAl() metodunun return deger; dersek işte deger kısmında aslında bir sınıf bulunuyor. Bu sınıf Arayuzum adlı interface’yi kullanmış. Normal şartlarda interfacelerden nesne oluşturulamaz lakin isimsiz sınıfları kullanırken sanki arayüzlerden de nesne oluşturulabiliyormuş gibi oluyor. Bu büyük bir kolaylık ve esneklik sağlıyor. Bunun sayesinde istediğimiz satırda istediğimiz interface’i kullanabiliriz. Son olarak isimsiz sınıfların bitiminde noktalı virgül ‘;’  kullanıldığına dikkat edelim.

Umarım faydası olmuştur. Herkese iyi kodlamalar..

Bir Cevap Yazın

This site uses Akismet to reduce spam. Learn how your comment data is processed.