Java’da Interfacelerin Tanımlanması ve Implement Edilmeleri

464
views

Bir önceki yazımızda LinkedListler konusunu işlemiştik. Bu dersimizde interface konusuna değineceğiz.

Interface’i anlatmadan önce bir konu hakkında bilgi vermek istiyorum. Önceki derslerde inheritanceları işlemiştik. Inheritance yardımıyla benzer classların ortak özelliklerini ve metotlarını tek bir çatı altında birleştirip daha sonrasında bu classları türebiliyorduk.

Java’da c++ da olduğu gibi multiple inheritance (çoklu kalıtım) bulunmuyor. Çünkü çoklu kalıtım yani birçok classtan türemek eğer miras aldığımız classlardaki fonksiyon isimleri aynıysa belli başlı sıkıntılar doğurabiliyor. O yüzden javada çoklu kalıtım bulunmuyor. Bu yüzden javada çoklu kalıtımın yaptığı işleri yapmamız için interface kavramı bulunuyor.

interfacelerin çok fazla sayıda özelliği bulunuyor. İlk olarak bu özelliklerden bahsedelim.

Java’da bir interface’in metotlarının kod blokları yazılmıyor. Bu yüzden interface e uyan bütün classların bu metotları tanımlamaları gerekiyor. Yani tek tek bu metotları kendi classları içerisinde yazması gerekiyor. Ve bu anlamda interfaceler aslında sözleşme görevi görüyor. Yani sözleşmenin maddeleri var ve sonrasında bu maddelerin hepsini imzalamanız gerekiyor şeklinde düşünebilirsiniz. Burdada aynı mantık. İnterface e yazdığınız metotları eğer interface e uyan classlar varsa hepsinin bunları tek tek tanımlamaları ve yazmaları gerekiyor. Ve inerfaceler normal classlar gibi olmadığından dolayı bunlardan herhangi bir obje oluşturamıyoruz. Ancak ve ancak interface referansları yani interfaceden oluşturduğumuz bir referans bunları implement eden classların objelerine referans olabiliyor. Yani kendisinden bir obje oluşturamıyoruz ancak bu interface i implement eden classlarımıza referans olabiliyoruz. interfacelerin böyle bir özelliği var.

interfacelerin içinde herhangi bir özellik bulunamıyor. Sadece final ve static değişkenler tanımlanabiliyor. Final ve static konularını sonraki derslerde işleyeceğiz.

interfaceler bunları implement eden classlar için bir çatı olarak düşünülebilir. Ayrıca javada herhangibir class birden fazla interface i implement edebiliyor. Bu özellik sayesinde de biz çoklu kalıtımı javaya uyarlamış oluyoruz.

Biz bir interface yazdığımızda bunun içine blokları yazılmamış metotları yazıyoruz. Ve interface e uyan tüm classlar bunları implement etmek yani bunları yazmak zorunda kalıyor. Ayrıca bu classlar kendilerine ek metotlar veya özellikle ekleyebiliyorlar. İşte interfacelerin mantığı bu şekildedir.

Şimdi örnek üzerinden anlamaya çalışalım;

Bu derse kadar örneklerimizi hep java class tanımlayarak oluşturmuştuk. Şimdi ise interface tanımlamamız gerekiyor. Bunun için;

Sağ tıklayıp -> new -> java interface e tıklıyoruz.

interfacelerde aslında bir çeşit class sayılıyor. Ancak public class şeklinde değilde public interface şeklinde yazıyoruz. Ve bu interface mizin içine metotlarımızı giriyoruz. Metotları girdikten sonrada bunu implemente eden yani bu interface e uyan tüm classların bu metotları yazması gerekiyor.

Şimdi örnek 4 tane metot yazalım;

Bu metotları public yada private şeklinde yazabiliriz yani başına erişim belirleyici koyabiliriz. Ancak interface den bir tane obje oluşturamadığımız için bunları yazmamıza gerek kalmıyor. Java bunu bizden istemiyor. Sadece dönüş tipini yazıp fonksiyonlarımızı yerleştirmeye çalışacağız.

Metotlarımızı yazdık. Şimdi bir tane classtan bunları implement etmemiz gerekiyor. O yüzden şimdi bir tane class oluşturuyoruz.

Bu classımızın interface i implemente edebilmesi için bir tane anahtar kelime girmemiz gerekiyor. Bu yüzden implements anahtar kelimesini ve interface in adını yanına eklememiz gerekiyor.

Ancak bu seferde bütün metotları implement etmen gerekiyor şeklinde hata veriyor bize.

Classın içinde sağ tıklayıp;

insert code a tıklıyoruz. Ardından;

implement method a tıklıyoruz. Çıkan ekranda;

işaretleyip generate diyoruz.

Override şeklinde yazılıyor. İlk başta javanın otomatik olarak eklediklerini silelim. Sonrasında metotların içini kendimiz doldurmaya çalışacağız. Ondan önce classımıza 2 tane özellik ekleyelim.

Boolean tipinde yazdık özelliklerimizi. True yada false değerlerini alacak. Sonrasında constructorlarımızı oluşturduk. Şimdi metotların içini doldurmaya başlıyoruz.

Şimdi interface ve PcMuhendis sınıfını main classımız içinde kontrol edelim.

İlk olarak interface sınıfından bir referans oluşturuyoruz. Sonrasında metotları çağırıyoruz.

Yukarıda bir tane interface tanımladık. Daha sonra PcMuhendisi imnterface sınıfının içindeki metotları kendine göre tanımladı. Yani biz burada başka bir class yazsaydık o metotları tanımlasaydı metotları kendine göre tanımlayacaktı. İnterfacelerin mantığı bu şekildedir. Son olarak aşağıdaki gibi değişiklik yaptığımızda da herhangi bir hata almadan kullanabiliriz.

Bir sonraki yazımızda interface konusundaki ek detaylara değineceğiz. Sonraki derse geçmek için tıklayınız.

1 Yorum

CEVAP VER

Lütfen yorumunuzu giriniz!
Lütfen isminizi buraya giriniz