Interface içinde sadece kendisinden türeyen sınıfların içini doldurmak zorunda olduğu içi boş metod tanımlarının yapıldığı bir yapıdır. Kısacası kendisini kullanacak sınıflar için bir yerine getirmeleri gereken metodları belirten bir kontrat gibidir.
Bir interface sınıfında sadece metotlar deklare edilir. Bu metotların gövdeleri boştur. Alt sınıflar bu metotların gövdeleri için gerekli kodu oluştururlar yani implemente ederler. Metot gövdesi olmayan bir interface sınıftan nesne oluşturulamaz, çünkü sadece metot deklarasyonlarına sahip bir nesnenin hiçbir işlevsel görevi olamaz.
1 2 3 4 |
public interface Tasit { public String getMarka(); } |
Ford ve Audi isminde iki sınıf bulunuyor. Bu sınıflar Tasit interface sınıfını implemente ediyorlar. Bu iki implementasyon sınıfı bünyelerinde getMarka() isminde bir metod oluşturup, bu metodu implemente etmek (metot gövdesi için gerekli kodu oluşturmak) zorundalar.
1 2 3 4 5 6 7 |
public class Audi implements Tasit { public String getMarka() { return "Audi A4"; } } |
Herhangi bir Java sınıfı implements direktifini kullanarak, bir interface sınıfının sahip olduğu metotları implemente edebilir. İmplementasyon ile, interface sınıfının tanımladığı (örneğin
getMarka()) metot gövdelerinin, alt sınıfta (yukardaki örnekte Audi sınıfı) kodlanmasını kastediyoruz. Buna göre interface sınıflarında sadece metodlar deklare edilebilir ve implemente edilemez. İmplementasyonu alt sınıflar üstlenir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
public class TasitTest2 { /** * New operatörü kullanilarak, bir Audi marka * tasit ürettik. Tasit interface'ini kullanan main metodu * Tasit veritipinde bir nesne tanimliyor. Bu nesne * Tasit interface'ini implemente eden herhanigi bir sinif * olabilir. * * @param args */ public static void main(String args[]) { Tasit tasit = new Audi(); System.out.println(tasit.getMarka()); |
Java interface sınıflarının, kullanıcı sınıflar için bir nevi sözleşme metni oluşturduğunu gördük. Bir interface sadece dış dünyaya sunulacak hizmetleri tanımlar. Bu hizmetlerin nasıl yerine getirileceğine, interface sınıfını implemente eden altsınıflar karar verir. Interface kullanıcısı genelde hangi altsınıf üzerinden gereken hizmeti aldığını bilmez, bilmek zorunda değildir. Bu sayede loose coupling olarak tabir edilen, servis saglayıcı ve kullanıcı arasında gevşek bir bağımlılık oluşturulmuş olur. Bu yazılım mimarisi açısından büyük bir avantaj sağlamaktadır. Interface sınıflar kullanılarak, sisteme esnek ve ilerde servis kullanıcılarını
etkilemeden eklemeler yapilabilir.
Interface Neden Kullanılır?
Kısaca interface sınıflar, servis kullanıcılarından, kompleks yapıdaki alt sınıfları saklamak için, servis sunucusu ve saglayıcı arasındaki bağımlılığı azaltmak için kullanılır.