Kotlinde Sınıflar(Classes)-1

İsmail Talha DENGİZ
3 min readApr 25, 2020

Sınıf ve nesne kavramı Nesne Yönelimli Programlama(Object Oriented Programming) dillerinin temelini oluşturur. Birbiriyle alakalı değişkenleri, methodları bir arada tuttuğumuz yapıya sınıf(class) ismi verilir. Bu sınıfın içerisindeki üyelere ulaşabilmek için ise main fonksiyonunda o sınıfın nesnesini(instance) oluşturmamız gerekir. Nesne oluştururken neye ihtiyaç duyduğumuzu bize bildiren sınıf içinde bir yapıya, bir kurucuya(constructor) ihtiyacımız olur.

Bir class, class keywordü ile başlar sonrasında isim verilir ve süslü parantezler arasına ilgili kodlar yazılır. Yukarıda anlatılanları şimdi kod içerisinde görelim:

Class and Object Defined

Yukarıdaki örnekte nesne oluştururken sınıf isminin yanındaki parantezler constructor parantezleridir. Sınıf içinde constructor tanımlanmamasına rağmen nesne oluşturabildik çünkü hem Java hem de Kotlin eğer biz constructor tanımlamazsak default olarak boş bir constructor tanımlar. Eğer biz parametresi bulunan bir constructor tanımlarsak bunun yanında kendimiz boş bir constructor tanımlamadığımız sürece default constructorı kullanamayız.

Kotlinde iki çeşit constructor bulunur. Bunlar; Primary Constructor ve Secondary Constructor. Javada constructorlar süslü parantezler içerisine yazılırken Kotlinde Primary Constructor sınıf isminin yanına yazılır. Bir sınıf için bir Primary Constructor tanımlanırken birden fazla Secondary Constructor tanımlayabiliriz.

Constructor keywordü ile constructor tanımı başlar fakat Primary Constructor için eğer access modifier(erişim belirleyici-public,private gibi) veya annotations(@target gibi) yoksa constructor keywordünü silebiliriz. Aşağıdaki örnekte constructor tanımlamalarını ve “property”lerin farklı şekillerdeki kullanımlarını görmeden önce burada bir parantez açıp sonra koda geçelim. :)

Javada class içerisindeki değişkenlere “field”, o değişkene ulaşmak, değer atamak için kullanılan methodlara ise “property” adı verilir. Kotlinde ise class içindeki değişkenlere “property” adı verilir. Çünkü kotlinde get ve set methodlarını yazmayız, bunlar otomatik oluşturulur. Yani kod yazarken biz değişkenin kendisine ulaşıp, değerini değiştiriyormuşuz gibi görünür fakat arka planda aslında get ve set methodlarında işlem yapılır. Bu yüzden Kotlinde class içindeki değişkenlere “property” denilir.

INHERITANCE (KALITIM)

Kalıtımı kısaca, bir sınıfın özelliklerini başka bir sınıfa aktarmak olarak ifade edebiliriz. Javada tüm classlar biz yazmasak bile Object classından extend ederlerken(miras alırlarken), Kotlinde tüm classlar Any’den extend ederler. Extend etme işlemi Javada extend keywordü ile yapılırken Kotlinde ‘ : ’ile yapılır. Yine Javadan farklı olarak hangi classtan extend ediyorsak o classı open yapmamız gerekir. Bu şekilde miras alınabilir bir sınıf olduğunu belirtmiş oluruz. Extend edilememesi için final yazılır ki default hali zaten budur.

Extend edeceğimiz class içerisinde bulunan property ve methodları da open yaptığımızda miras alan classlarda override ederek kullanabiliriz. Miras alan sınıflarda property veya merthodları super çağrımıyla kullanırsak miras aldığı sınıftaki property ve methodların yaptığı işi yapar. Kendi yaptırmak istediğimiz işi yine super çağrımından sonra da yazabiliriz.

Class ile beraber property ve methodlarını open yaptıktan sonra miras alan sınıfta bu property ve methodları super çağrımı ile kullanmak yerine farklı anlamlar yüklersek bu işleme Polimorfizm(Polymorphism) adı verilir.

Extend eden sınıftanda bir extend işlemi gerçekleştiğinde 2.classta override edilen bir property ve methodun 3.classta kullanılmasını istemiyorsak override keywordunden önce final keywordü kullanabiliriz.

VISIBILITY MODIFIERS(Görünürlük Belirleyiciler)

Kaynak

Javada üç visibility modifiers bulunur.Bunlar: Public, Private ve Protected.

Kotlinde ise dört visibility modifiers bulunur. Bunlar: Public, Private, Protected ve Internal. Kotlinde tüm sınıflar herhangi bir modifier belirtmezsek default olarak publictir.

Bir class public olduğunda her yerden erişilebilir anlamına gelmektedir.

Private olduğunda ise o classın her yere(diğer dosya ve modüllere) kapalı olduğu anlamına gelmektedir. Yani erişim sağlanamaz.

Internal olması ise classın bulunduğu modül içerisinde erişilebilir, diğer modüllerden erişilemez olduğu anlamına gelmektedir.

Javada üç modifiers da top-level(Classın dışında veya tanım satırında yazmak) olarak yazılabilirken, Kotlinde protected top-level olarak yazılamaz. Bunun yerine classın property ve methodlarında veya primary constructordan önce kullanılabilir. Protected yapıldığında sadece extend edilen classlardan erişilebilir fakat override edilemez. Override işlemi için protected ile beraber open keywordü kullanılmalıdır.

Bir sonraki yazımda classlara devam edeceğim. İyi çalışmalar. :)

--

--