Monday, September 13, 2010

Interface Class

  • Interface(Arayuz) abstract siniflarin gelismi bir hali diyebiliriz.
  • Bir interface interface keyword ile tanimlaniyor ve sisteme bir class dosyasi olarak kaydedilen bir yapidir
  • Interface tamamen birlestirici bir rol oynamak icin gelistirilmistir.
  • Interface'ler iclerinde govdesiz methodlar ve degiskenler icerir.
  • Bir interface bir class'a implements keyword declare olur
  • Interface class'a implementsolunca icindeki tum govdesiz methodlari Override etmek zorunda
  • Interface  siniflar icin bir yol gostericidir. Yani interface icinde govdesiz methodlarin oldugunu soylemistik iste bu govdesiz methodlar olusturuken diyorki bak method senin ismin bu olacak sen bunu dondereceksin ve bu parametreleri alacaksin gibisinde olusturulan govdesiz methodlar bulundugu interfaceyi biz bir class'a implements  ettigimizde bu methodlar implements ettigimiz class'a Override olunca artik kullanicinin yapmasi gereken bu methodlari govde kismini doldurmak yani kullanici artik biliyor bu method hangi parametreleri iceriyor neyi dondurecegi gibi bilgiler ile ugrasma zahmetinden kurtuluyor.
  • Interface methodlarinin erisim belirtecleri public olmak zorundadir.
  • Interfacenin en onemli ozeliklerinden biriside class'lar uzerinde coklu kalitima izin vermesidir.
  • Interfaceler birbirlerinden turetilebilir. Bu turutme extends keyword ile oluyor. Birdenfazla intreface extends edilmesine izin veriyor. extends olunan interface'ler Override edilmez . Ama bir sinifa implements edilince kendisi ile beraber extends olundudu tum methodlar Override olunur.
  • Bir interface'yi abstract class implements edince methodlari Override edilmez. Ama abstract class bir sinifa extends olunca hem abstract'teki hemde interface'deki methodlar Override olunur.
  • Interface icerisinde ayno zamanda degiskenlerde bulunur. Bu degiskenler otomatik olarak hem public hem final hemde static  ozeligine sahiptir.
  • Interface icerisinde tanimlanan degiskenler ilk degerini calisma aninda verilebilir
  • Interface ile ilgili bir tek sorun ile karsilasilabilir o da birden cok interfacede extends olunmis bir interface dusunelim diyelimki bu interface ikitane interfacede turemis ve bu iki interfacede geridous degerlerinin disinda ayni olan methodlari barindirmasi bazi sorunlara neden olabilir.
       public interface Insanlar {
                     String getName();
                     String getSurname();
                     int getBoy();
                     String getGozRengi();
                     int getKilo();
                     int getYas();
      }


      public class Abdulkadir implements Insanlar{

              public String getName() {
                      return "Abdulkadir";
             }

             public String getSurname() {
                   return "Selcukoglu";
             }

             public int getBoy() {
                    return 180;
             }

             public String getGozRengi() {
                     return "Ela";
             }

            public int getKilo() {
                     return 71;
           }

           public int getYas() {
                 return 27;
            }

      }
 



      public class Ertugrul implements Insanlar{

              public String getName() {
                      return "Ertugrul";
               }

              public String getSurname() {
                      return "Aslan";
              }

              public int getBoy() {
                       return 182;
              }

              public String getGozRengi() {
                      return "Kahverengi";
              }

              public int getKilo() {
                       return 70;
              }

              public int getYas() {
                     return 26;
             }

     }


      public class TestMain {
              public static void main(String argsp[]) {
                      Abdulkadir a = new Abdulkadir();
                      System.out.println("Name : " + a.getName());
                      System.out.println("Surname : " + a.getSurname());
                      System.out.println("Yas : " + a.getYas());
                      System.out.println("Kilo : " + a.getKilo());
                      System.out.println("Boy : " + a.getBoy());
                      System.out.println("Goz Rengi : " + a.getGozRengi());
                      System.out.println("----------------------------------------"); 

                      Ertugrul e = new Ertugrul();
                      System.out.println("Name : " + e.getName());
                      System.out.println("Surname : " + e.getSurname());
                      System.out.println("Yas : " + e.getYas());
                      System.out.println("Kilo : " + e.getKilo());
                      System.out.println("Boy : " + e.getBoy());
                      System.out.println("Goz Rengi : " + e.getGozRengi());
             }
      }


//Console Output
Name : Abdulkadir
Surname : Selcukoglu
Yas : 27
Kilo : 71
Boy : 180
Goz Rengi : Ela
----------------------------------------
Name : Ertugrul
Surname : Aslan
Yas : 26
Kilo : 70
Boy : 182
Goz Rengi : Kahverengi



Simdi ayni ornegi interface kullanimi sayesinde polimorfizim ile gorelim 

      public class TestMain {
              public static void main(String argsp[]) {
                     Abdulkadir a = new Abdulkadir();
                     insanP(a);
                     Ertugrul e = new Ertugrul();
                     insanP(e);
            }

          public static void insanP(Insanlar i){
                   System.out.println("Name : " + i.getName());
                   System.out.println("Surname : " + i.getSurname());
                   System.out.println("Yas : " + i.getYas());
                   System.out.println("Kilo : " + i.getKilo());
                   System.out.println("Boy : " + i.getBoy());
                   System.out.println("Goz Rengi : " + i.getGozRengi());
                   System.out.println("----------------------------------------");
          }
    }

 

//Console Output 
Name : Abdulkadir
Surname : Selcukoglu
Yas : 27
Kilo : 71
Boy : 180
Goz Rengi : Ela
----------------------------------------
Name : Ertugrul
Surname : Aslan
Yas : 26
Kilo : 70
Boy : 182
Goz Rengi : Kahverengi
----------------------------------------
 

 Simdide bir interface'nin bir cok interface'de turetilmesine bakalim yukarda yazdigim gibi bir interface'yi diger interfacede turetmek icin extends ifadesinden kullaniyoruz. Asagidaki ornektede anlasilacagi gibi Insanlar interface'si Canlikar'dan turemis ve turme sirasinda herhangi bir override islemi olmamisitir. Biz Insanlar interfacesini bir class implements edince hem Canlilar'daki hemde Insalar'daki methodlar override olunur.
  
        public interface Canlilar {
                  void yemek();
                  void sinirlenmek();
                  void acikmak();
                  String gulmek();
       }

.
 
 

         public interface Insanlar extends Canlilar{
                     String getName();
                     String getSurname();
                     int getBoy();
                     String getGozRengi();
                     int getKilo();
                     int getYas();
        }
 

       public class Rasim implements Insanlar{

             public String getName() {
                     return "Rasim";
            }
            public String getSurname() {
                  return "Imanov";
           }
          public int getBoy() {
                return 165;
         }
         public String getGozRengi() {
               return "Kahverengi";
         }
         public int getKilo() {
              return 82;
         }
         public int getYas() {
            return 36;
         }
         public void yemek() {
             System.out.println("Yemek yemyi sever");
         }
         public void sinirlenmek() {
               System.out.println("Cok sinirli degil");
        }
        public void acikmak()
{
             System.out.println("Normal acikir");
       }
       public String gulmek() {
             return "Ha ha ha ..... :)";
       }
  }
 


Simdide bir interface'ye bircok inteface'nin extends olunmasi uygulamasi  


public interface B { 
       // -------------------------------------
}
 


public interface C { 
       // -------------------------------------
}



public interface D { 
       // -------------------------------------
}


 public interface A extends B,C,D{
      //-------------------------------------
}

No comments:

Post a Comment