"Merhaba, Amigo! Bugün bazı keşifler yapacaksın. Bugünün konusu - davul çalma lütfen - arayüzler. "

"Evet. O kadar harika bir gün ki banyo yapmak için eve gidiyorum."

" Arayüz , Soyutlama ve Polimorfizm'in çocuğudur. Arayüz, tüm yöntemlerin soyut olduğu soyut bir sınıfa çok benzer. Bir sınıfla aynı şekilde, ancak anahtar kelimeyle bildirilir. İşte bazı örnekler: interface"

kod Açıklama ve gerçekler
interface Drawable
{
void draw();
}
interface HasValue
{
int getValue();
}
1) kelimesi yerine classyazarız interface.

2) Yalnızca soyut yöntemler içerir (özet kelimesini eklemeye gerek yoktur).

3) Aslında, arabirimlerdeki tüm yöntemler herkese açıktır.

interface Element extends Drawable, HasValue
{
int getX();
int getY();
}
Bir arabirim yalnızca diğer arabirimleri devralabilir.

Birçok üst arayüze sahip olabilirsiniz.

abstract class ChessItem implements Drawable, HasValue
{
private int x, y, value;

public int getValue()
{
return value;
}

public int getX()
{
return x;
}

public int getY()
{
return y;
}

}
Bir sınıf, birkaç arabirimi (ve yalnızca bir sınıfı) miras alabilir. Bu kalıtımı göstermek için anahtar kelimeyi kullanırız  implements.

Sınıf ChessItem soyut olarak ilan edildi: çizim dışında tüm kalıtsal yöntemleri uyguladı.

Başka bir deyişle, ChessItem bir soyut yöntem içerir:  draw().

"İlginç. Peki arayüzlere neden ihtiyacımız var? Ne zaman kullanılıyorlar?"

"Arayüzlerin sınıflara göre iki güçlü avantajı vardır:"

1) Yöntem uygulamalarından "yöntem tanımlarının" ayrılması.

Daha önce size, diğer sınıfların sizin sınıfınızın metotlarını çağırmasına izin vermek istiyorsanız, o zaman onları olarak işaretlemeniz gerektiğinipublic söylemiştim . Belirli yöntemlerin yalnızca kendi sınıfınızdan çağrılmasını istiyorsanız, o zaman işaretlenmeleri gerekir private. Başka bir deyişle, sınıfın yöntemlerini iki kategoriye ayırıyoruz: «herkes için» ve «sadece benim için».

Bu ayrımı daha da güçlendirmek için arayüzleri kullanabiliriz. İkinci bir "sadece benim için" dersini miras alacak özel bir "herkes için sınıf" oluşturacağız. Bu yaklaşık olarak şuna benzer:

Önce
class Student
{
 private String name;

 public Student(String name)
 {
  this.name = name;
 }

 public String getName()
 {
  return this.name;
 }

 private void setName(String name)
 {
  this.name = name;
 }
Sonrasında
interface Student
{
 public String getName();
}

class StudentImpl implements Student
{
 private String name;
 public StudentImpl(String name)
 {
  this.name = name;
 }
 public String getName()
 {
  return this.name;
 }
 private void setName(String name)
 {
  this.name = name;
 }
}
Önce
public static void main(String[] args)
{
 Student student =
               new Student("Alibaba");
 System.out.println(student.getName());
}
Sonrasında
public static void main(String[] args)
{
 Student student =
               new StudentImpl("Ali");
 System.out.println(student.getName());
}

Sınıfımızı iki parçaya ayırdık: bir arayüz ve arayüzü uygulayan bir sınıf.

"Peki avantajı nedir?"

"Aynı arabirim, farklı sınıflar tarafından uygulanabilir (miras alabilir). Ve her sınıfın kendi davranışı olabilir. Tıpkı ArrayList ve LinkedList gibi , List arabiriminin iki farklı uygulamasıdır. "

Böylece, sadece farklı uygulamaları değil, aynı zamanda uygulamaları içeren sınıfları da saklıyoruz (arayüzleri kodun her yerinde kullanabiliriz). Bu, program çalışırken bazı nesneleri diğer nesnelerle çok esnek bir şekilde değiştirmemize, bir nesnenin davranışını onu kullanan sınıfların bilgisi olmadan değiştirmemize olanak tanır.

Polimorfizm ile birlikte bu çok güçlü bir tekniktir. Şu anda, bunu neden yapmamız gerektiği açık olmaktan çok uzak. Arayüzlerin hayatınızı ne kadar büyük ölçüde kolaylaştırabileceğini anlamak için önce onlarca hatta yüzlerce sınıftan oluşan programlarla karşılaşmalısınız.

2) Çoklu kalıtım.

Java'da her sınıfın yalnızca bir ebeveyn sınıfı olabilir. Diğer programlama dillerinde, sınıflar genellikle birkaç üst sınıfa sahip olabilir. Bu çok uygundur, ancak aynı zamanda pek çok sorun yaratır.

Java bir uzlaşma sunar:   birden çok sınıfı miras alamazsınız, ancak birden çok arabirim uygulayabilirsiniz. Bir arayüzün birkaç ana arayüzü olabilir.  Bir sınıf, birden çok arabirim uygulayabilir ve yalnızca bir üst sınıfı miras alabilir.