1. Ngenalke antarmuka

Dina iki dina kanggo kawruh. Topik anyar lan menarik liyane yaiku antarmuka.

Konsep antarmuka minangka anak saka prinsip abstraksi lan polimorfisme. Antarmuka meh padha karo kelas abstrak, sing kabeh metode abstrak. Diumumake kanthi cara sing padha karo kelas, nanging kita nggunakake tembung interfacekunci.

interface Feline
{
   void purr();
   void meow();
   void growl();
}

Ing ngisor iki sawetara fakta migunani babagan antarmuka:

1. Pranyatan antarmuka

interface Drawable
{
   void draw();
}

interface HasValue
{
   int getValue();
}
  1. Tinimbang classtembung kunci, kita nulis interface.
  2. Isine mung cara abstrak (aja nulis abstracttembung kunci)
  3. Nyatane, antarmuka duwe kabehpublic cara
2. Warisan antarmuka

Antarmuka mung bisa warisan antarmuka. Nanging antarmuka bisa duwe akeh tuwane. Cara liya kanggo ngomong iki yaiku yen Jawa nduweni warisan antarmuka. Tuladha:

interface Piece extends Drawable, HasValue
{
   int getX();
   int getY();
}

3. Warisan kelas saka antarmuka

A kelas bisa oleh warisan sawetara antarmuka (mung saka siji kelas). Iki rampung nggunakake implementstembung kunci. Tuladha:

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;
   }
}

Kelas ChessItem diumumake abstrak: iki ngetrapake kabeh metode sing diwarisake kajaba draw. Ing tembung liyane, ChessItemkelas ngandhut siji cara abstrak - draw().

Makna teknis extendslan implementstembung kunci padha: loro-lorone minangka warisan. Bedane digawe kanggo nambah keterbacaan kode. Kita uga ujar manawa kelas diwarisake (liwat extends) lan antarmuka ditindakake (liwat implements)

4. Variabel

Mangkene sing paling penting: variabel biasa ora bisa diumumake ing antarmuka (sanajan bisa uga statis).

Nanging kenapa kita butuh antarmuka? Nalika padha digunakake? Antarmuka duwe rong kaluwihan sing kuat tinimbang kelas:



2. Misahake "deskripsi metode" saka implementasine.

Sadurunge, kita ujar manawa sampeyan pengin ngidini metode kelas sampeyan diarani saka kelas liyane, mula metode sampeyan kudu ditandhani nganggo tembung publickunci. Yen sampeyan pengin sawetara cara kasebut mung diarani saka kelas sampeyan, sampeyan kudu menehi tandha nganggo tembung privatekunci. Ing tembung liyane, kita dibagi metode kelas dadi rong kategori: "kanggo kabeh wong kanggo nggunakake" lan "mung kanggo nggunakake kita dhewe".

Antarmuka mbantu ngiyataken divisi iki luwih. Kita bakal nggawe "kelas kanggo kabeh wong nggunakake" khusus uga kelas kapindho "mung kanggo kita dhewe", kang bakal oleh warisan kelas pisanan. Mangkene kira-kira bakal katon:

sadurunge Sawise
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;
   }
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;
   }
}
public static void main(String[] args)
{
   Student student = new Student("Alibaba");
   System.out.println(student.getName());
}
public static void main(String[] args)
{
   Student student = new StudentImpl("Ali")
   System.out.println(student.getName());
}

Kita pamisah kelas kita dadi loro: antarmuka lan kelas sing marisi antarmuka . Lan apa kauntungan ing kene?

Akeh kelas beda bisa ngleksanakake (marisi) antarmuka sing padha. Lan saben wong bisa duwe prilaku dhewe. Contone, ArrayList LinkedListana rong implementasi antarmuka sing beda List.

Mangkono, kita ndhelikake ora mung macem-macem implementasine, nanging uga kelas implementasine dhewe (amarga kita mung butuh antarmuka ing kode kasebut). Iki ngidini kita dadi banget fleksibel: tengen minangka program mlaku, kita bisa ngganti siji obyek karo liyane, ngganti prilaku obyek tanpa mengaruhi kabeh kelas sing nggunakake.

Iki minangka teknik sing kuat banget yen digabungake karo polimorfisme. Saiki, ora jelas kenapa sampeyan kudu nindakake iki. Sampeyan kudu nemoni program kanthi puluhan utawa atusan kelas supaya ngerti manawa antarmuka bisa nggawe urip luwih gampang tinimbang tanpa.


3. Pusaka pirang-pirang

Ing Jawa, kabeh kelas mung bisa duwe siji kelas induk. Ing basa pamrograman liyane, kelas asring duwe sawetara kelas induk. Iki trep banget, nanging uga nggawa akeh masalah.

Pencipta Jawa teka ing kompromi: padha nglarang warisan pirang-pirang kelas, nanging ngidini sawetara warisan antarmuka. Antarmuka bisa duwe sawetara antarmuka induk. Kelas bisa duwe sawetara antarmuka induk nanging mung siji kelas induk.

Napa dheweke nglarang sawetara warisan kelas nanging ngidini macem-macem warisan antarmuka? Amarga sing diarani masalah warisan berlian:

Multiple warisan

Nalika kelas B marisi kelas A, ora ngerti apa-apa babagan kelas C lan D. Dadi nggunakake variabel kelas A kaya sing dikarepake. Kelas C nindakake perkara sing padha: nggunakake variabel kelas A, nanging kanthi cara sing beda. Lan kabeh iki nyebabake konflik ing kelas D.

Ayo deleng conto prasaja ing ngisor iki. Ayo kita duwe 3 kelas:

class Data
{
   protected int value;
}
class XCoordinate extends Data
{
   public void setX (int x) { value = x;}
   public int getX () { return value;}
}
class YCoordinate extends Data
{
   public void setY (int y) { value = y;}
   public int getY () { return value; }
}

Kelas Data nyimpen valuevariabel. Kelas turunan XCoordinate nggunakake variabel kasebut kanggo nyimpen xnilai kasebut, lan YCoordinatekelas turunan nggunakake kanggo nyimpen ynilai kasebut.

Lan kerjane. Kapisah. Nanging yen kita pengin kelas XYCoordinates kanggo warisan loro XCoordinatelan YCoordinatekelas, banjur kita njaluk kode rusak. Kelas iki bakal duwe metode kelas leluhur, nanging ora bakal bisa digunakake kanthi bener, amarga padha duwe value variable.

Nanging amarga antarmuka ora bisa duwe variabel, ora bisa duwe konflik kaya iki. Patut, macem-macem warisan antarmuka diijini.