Java - Arabirim ( Interface )

Çarşamba, Mayıs 13, 2015 kustemura 0 Yorum


Bu yazımda arabimlerden (interface) bahsedeceğim . interface anahtar sözcüğünü kullanarak , bir sınıfın arabirimini onun uygulamasından tamamen özetleyebilirsiniz.Yani , interface kullanarak bir sınıfın nasıl yapacağını değil , ne yapması gerektiğini belirtebilirsiniz. Arabirimler söz dizimi olarak sınıflarla benzerlik gösterirler.Fakat arabirimlerin örnek değişkenleri yoktur ve methodları gövdesiz olarak deklare edilir.

- Arabirim bir kez tanımlandığında bir çok sınıf tarafından implement edilebilir.Ayrıca bir sınıf da bir çok arabirime sahip olabilir.
- Özet sınıflara benzemelerine rağmen arabirimlerin bir kabiliyeti daha vardır:Bir sınıf birden fazla arabirim uyguyabilir.Buna karşılık bir sınıf sadece tek bir üst sınıftan ( özet veya başka) türetilebilir.
- Bir arabirim implement etmek için sınıfın arabirim tarafından tanımlanan methodların tümünü uygulaması zorunludur.
- Implement edilen arabirimin methodları uyglandığında sınıf kendi methodlarını da ekleyebilir.
- Implement edildiği sınıfın arabirim ile aynı ismi taşıyan methodun aynı tip imzası ve public erişim belirtecine sahip olması gereklidir.

Basit bir örnek ile inceleyelim.

interface Callback {
 void callBack(int param);
}

class Client implements Callback {

 @Override
 public void callBack(int param) {
  System.out.println("callBack methodu çağrıldı " + param);
 }

 void nonIFaceMeth() {
  System.out
    .println("Bir sınıfa implement edilen arabirimden (interface) "
      + "üyelerinden başka kendi üyelerini tanımlayabilir. ");
 }

}

class TestInterface {
 public static void main(String args[]) {
  Callback c = new Client();
  c.callBack(5);
 }
}
Programın Çıktısı : 
callBack methodu çağrıldı 5
Burada c , Callback arabirim tipinde deklare edilmiştir.Ancak ona Client'in bir örneği atanmıştır.c, callBack() methoduna erişmek için kullanılabilmesine rağmen Client sınıfının diğer üyelerine erişemez.Bir arabirim referans değişkeni sadece kendi interface deklerasyonunda deklare edilen methodun bilgisine sahiptir.Bu sebepten ötürü c , nonIFaceMeth() methoduna erişemez.Çünkü c , Callback tarafından değil , Client tarafından tanımlanmıştır. Başka bir örnek ile açıklayayım.
interface Callback {
 void callBack(int param);
}

class Client implements Callback {

 @Override
 public void callBack(int param) {
  System.out.println("Client \n callBack methodu çağrıldı " + param);
 }

 void nonIFaceMeth() {
  System.out
    .println("Bir sınıfa implement edilen arabirimden (interface) "
      + "üyelerinden başka kendi üyelerini tanımlayabilir. ");
 }

}

class AnotherClient implements Callback {
 @Override
 public void callBack(int param) {
  System.out.println("AnotherClient");
  System.out.println(" " + param + "'in Karesi " + (param * param));
 }
}

class TestInterface2 {
 public static void main(String args[]) {
  Callback c = new Client();
  final AnotherClient ac = new AnotherClient();

  c.callBack(5);
  c = ac;
  c.callBack(5);

 }
}
Programın Çıktısı : 
Client 
 callBack methodu çağrıldı 5
AnotherClient
 5'in Karesi 25
Yuvalanmış Arabimler Bir arabirim bir sınıfın yada başka bir arabirim üyesi olarak deklare edilebilir.Böyle bir arabirime üye arabirim veya yuvalanmış arabirim denir. Bir örnek yapalım.
class A {
 public interface NestedIF {
  boolean isNotNegative(int x);
 }
}

class B implements A.NestedIF {
 @Override
 public boolean isNotNegative(int x) {
  if (x < 0) {
   return false;
  } else {
   return true;
  }
 }
}

class NestedIFDemo {
 public static void main(String args[]) {
   A.NestedIF nif = new B();
  if (nif.isNotNegative(10)) {
   System.out.println("10 : Bu bir pozitif sayıdır.");
  }

  if (nif.isNotNegative(-10)) {
   System.out.println("-10 : Bu bir pozitif sayıdır.");
  } else {
   System.out.println("-10 : Bu bir negatif sayıdır.");
  }
 }
}
Programın Çıktısı : 
10 : Bu bir pozitif sayıdır.
-10 : Bu bir negatif sayıdır.
A'nın NestedIF adlı bir üye arabirim tanımladığına ve bu arabirimin public olarak deklare edildiğine dikkat edelim.B sınıfı implements A.NestedIF şeklinde belirtilerek yuvalanmış arabirimi uygular.nif adlı A.NestedIF referansı oluşturulur ve B nesnesine referans atanır.B sınıfı A.NestedIF arabirimini uygulandığından bu kullanım geçerlidir.

0 yorum :