Java - Arayüzler

Arayüz, Java'da bir referans türüdür. Sınıfa benzer. Soyut yöntemlerin bir koleksiyonudur. Bir sınıf bir arabirim uygular, dolayısıyla arabirimin soyut yöntemlerini miras alır.

Soyut yöntemlerin yanı sıra, bir arabirim ayrıca sabitler, varsayılan yöntemler, statik yöntemler ve iç içe türler içerebilir. Yöntem gövdeleri yalnızca varsayılan yöntemler ve statik yöntemler için mevcuttur.

Arayüz yazmak, sınıf yazmaya benzer. Ancak bir sınıf, bir nesnenin niteliklerini ve davranışlarını tanımlar. Ve bir arayüz, bir sınıfın uyguladığı davranışları içerir.

Arayüzü uygulayan sınıf soyut olmadıkça, arayüzün tüm yöntemlerinin sınıfta tanımlanması gerekir.

Bir arayüz aşağıdaki şekillerde bir sınıfa benzer:

  • Bir arayüz, herhangi bir sayıda yöntem içerebilir.

  • Bir arayüz, bir dosyaya yazılır. .java uzantısı, dosyanın adıyla eşleşen arabirimin adı ile.

  • Bir arayüzün bayt kodu bir .class dosya.

  • Arayüzler paketlerde görünür ve bunlara karşılık gelen bayt kodu dosyası, paket adıyla eşleşen bir dizin yapısında olmalıdır.

Bununla birlikte, bir arabirim bir sınıftan birkaç yönden farklıdır:

  • Bir arabirimi örnekleyemezsiniz.

  • Bir arabirim herhangi bir kurucu içermez.

  • Bir arayüzdeki tüm yöntemler soyuttur.

  • Bir arayüz, örnek alanları içeremez. Bir arayüzde görünebilecek tek alanlar hem statik hem de son olarak bildirilmelidir.

  • Bir arayüz bir sınıf tarafından genişletilmez; bir sınıf tarafından uygulanmaktadır.

  • Bir arabirim birden çok arabirimi genişletebilir.

Arayüzleri Bildirme

interfaceanahtar kelime, bir arayüz bildirmek için kullanılır. İşte bir arayüz bildirmek için basit bir örnek -

Misal

Aşağıda bir arayüz örneği verilmiştir -

/* File name : NameOfInterface.java */
import java.lang.*;
// Any number of import statements

public interface NameOfInterface {
   // Any number of final, static fields
   // Any number of abstract method declarations\
}

Arayüzler aşağıdaki özelliklere sahiptir -

  • Bir arayüz örtük olarak soyuttur. Kullanmanıza gerek yokabstract bir arayüz bildirirken anahtar kelime.

  • Bir arabirimdeki her yöntem de dolaylı olarak soyuttur, bu nedenle soyut anahtar sözcüğe gerek yoktur.

  • Bir arayüzdeki yöntemler örtük olarak geneldir.

Misal

/* File name : Animal.java */
interface Animal {
   public void eat();
   public void travel();
}

Arayüzlerin Uygulanması

Bir sınıf bir arabirim uyguladığında, sınıfı, arabirimin belirli davranışlarını gerçekleştirmeyi kabul ederek bir sözleşmeyi imzalar olarak düşünebilirsiniz. Bir sınıf arabirimin tüm davranışlarını gerçekleştirmezse, sınıf kendini soyut olarak bildirmelidir.

Bir sınıf, implementsbir arayüz uygulamak için anahtar kelime. İmplements anahtar sözcüğü, bildirimin extends bölümünü izleyen sınıf bildiriminde görünür.

Misal

/* File name : MammalInt.java */
public class MammalInt implements Animal {

   public void eat() {
      System.out.println("Mammal eats");
   }

   public void travel() {
      System.out.println("Mammal travels");
   } 

   public int noOfLegs() {
      return 0;
   }

   public static void main(String args[]) {
      MammalInt m = new MammalInt();
      m.eat();
      m.travel();
   }
}

Bu, aşağıdaki sonucu verecektir -

Çıktı

Mammal eats
Mammal travels

Arayüzlerde tanımlanan yöntemleri geçersiz kılarken, uyulması gereken birkaç kural vardır -

  • Denetlenen istisnalar, arabirim yöntemi tarafından bildirilenler veya arabirim yöntemi tarafından bildirilenlerin alt sınıfları dışındaki uygulama yöntemlerinde bildirilmemelidir.

  • Arayüz yönteminin imzası ve aynı dönüş türü veya alt türü, yöntemler geçersiz kılınırken korunmalıdır.

  • Bir uygulama sınıfının kendisi soyut olabilir ve öyleyse, arayüz yöntemlerinin uygulanmasına gerek yoktur.

Uygulama arayüzleri olduğunda, birkaç kural vardır -

  • Bir sınıf aynı anda birden fazla arabirim uygulayabilir.

  • Bir sınıf yalnızca bir sınıfı genişletebilir, ancak birçok arabirimi uygulayabilir.

  • Bir arabirim, bir sınıfın başka bir sınıfı genişletebilmesine benzer şekilde başka bir arabirimi genişletebilir.

Arayüzleri Genişletme

Bir arabirim, bir sınıfın başka bir sınıfı genişletebileceği şekilde başka bir arabirimi genişletebilir. extends anahtar sözcük, bir arabirimi genişletmek için kullanılır ve alt arabirim, ana arabirimin yöntemlerini miras alır.

Aşağıdaki Spor arayüzü Hokey ve Futbol arayüzleri ile genişletilmiştir.

Misal

// Filename: Sports.java
public interface Sports {
   public void setHomeTeam(String name);
   public void setVisitingTeam(String name);
}

// Filename: Football.java
public interface Football extends Sports {
   public void homeTeamScored(int points);
   public void visitingTeamScored(int points);
   public void endOfQuarter(int quarter);
}

// Filename: Hockey.java
public interface Hockey extends Sports {
   public void homeGoalScored();
   public void visitingGoalScored();
   public void endOfPeriod(int period);
   public void overtimePeriod(int ot);
}

Hokey arayüzünün dört yöntemi vardır, ancak iki yöntemi Sports'tan devralır; bu nedenle, Hockey'i uygulayan bir sınıfın altı yöntemi de uygulaması gerekir. Benzer şekilde, Futbolu uygulayan bir sınıfın Football'dan üç yöntemi ve Sports'tan iki yöntemi tanımlaması gerekir.

Çoklu Arayüzlerin Genişletilmesi

Bir Java sınıfı yalnızca bir ana sınıfı genişletebilir. Çoklu mirasa izin verilmez. Ancak arayüzler sınıf değildir ve bir arayüz birden fazla ana arayüzü genişletebilir.

Extends anahtar sözcüğü bir kez kullanılır ve ana arabirimler virgülle ayrılmış bir listede bildirilir.

Örneğin, Hokey arayüzü hem Spor'u hem de Etkinliği genişletirse, şu şekilde ilan edilirdi -

Misal

public interface Hockey extends Sports, Event

Arayüzleri Etiketleme

Genişletme arabirimlerinin en yaygın kullanımı, ana arabirim herhangi bir yöntem içermediğinde ortaya çıkar. Örneğin, java.awt.event paketindeki MouseListener arayüzü, genişletilmiş java.util.EventListener, şu şekilde tanımlanır:

Misal

package java.util;
public interface EventListener
{}

İçinde hiçbir yöntem bulunmayan bir arayüz, bir taggingarayüz. Arayüzleri etiketlemenin iki temel tasarım amacı vardır -

Creates a common parent- Java API'deki düzinelerce başka arabirim tarafından genişletilen EventListener arabiriminde olduğu gibi, bir arabirim grubu arasında ortak bir üst öğe oluşturmak için bir etiketleme arabirimi kullanabilirsiniz. Örneğin, bir arayüz EventListener'ı genişlettiğinde, JVM bu özel arayüzün bir olay yetkilendirme senaryosunda kullanılacağını bilir.

Adds a data type to a class- Bu durum, etiketleme teriminin geldiği yerdir. Etiketleme arabirimini uygulayan bir sınıfın herhangi bir yöntem tanımlaması gerekmez (arabirimde hiç olmadığı için), ancak sınıf çok biçimlilik yoluyla bir arabirim türü haline gelir.