"Halo, Amigo! Ini saya—sekali lagi. Saya ingin memberi Anda sudut pandang lain tentang antarmuka. Soalnya, sebagian besar kelas adalah model dari objek tertentu. Sebaliknya, antarmuka lebih seperti kemampuan objek atau peran, bukan objek itu sendiri."

Misalnya, hal-hal seperti mobil, sepeda, sepeda motor, dan roda paling baik direpresentasikan sebagai kelas dan objek. Tapi kemampuan mereka, seperti «Saya bisa bergerak», «Saya bisa membawa orang», dan «Saya bisa parkir», lebih baik direpresentasikan sebagai antarmuka. Lihat contoh ini:

kode jawa Keterangan
interface Moveable
{
void move(String newAddress);
}
Sesuai dengan kemampuan bergerak.
interface Driveable
{
void drive(Driver driver);
}
Sesuai dengan kemampuan bergerak.
interface Transport
{
void addStuff(Object stuff);
Object removeStuff();
}
Sesuai dengan kemampuan membawa kargo.
class Wheel implements Moveable
{
...
}
Kelas «roda». Memiliki kemampuan bergerak.
class Car implements Moveable, Drivable, Transport
{
...
}
Kelas «mobil». Memiliki kemampuan bergerak, dikemudikan oleh seseorang, dan membawa muatan.
class Skateboard implements Moveable, Driveable
{
...
}
Kelas «skateboard». Memiliki kemampuan untuk bergerak dan dikendalikan oleh seseorang.

Antarmuka sangat menyederhanakan kehidupan programmer. Program sangat sering memiliki ribuan objek, ratusan kelas, dan hanya beberapa lusin antarmuka (peran). Ada beberapa peran, tetapi dapat digabungkan dalam banyak cara (kelas).

Intinya adalah Anda tidak perlu menulis interaksi yang menentukan kode dengan setiap kelas lainnya. Yang harus Anda lakukan adalah berinteraksi dengan peran (antarmuka).

Bayangkan Anda adalah pembuat robot. Anda memiliki lusinan robot bawahan dan masing-masing dari mereka dapat memiliki banyak keterampilan. Misalkan Anda harus segera menyelesaikan pembangunan tembok. Anda tinggal mengambil semua robot yang memiliki kemampuan untuk "membangun" dan menyuruh mereka membangun tembok. Anda tidak terlalu peduli robot mana yang melakukannya. Biarkan itu menjadi kaleng penyiram robot. Jika ia tahu cara membangun, biarkan ia membangun.

Begini tampilannya dalam kode:

kode jawa Keterangan
static interface WallBuilder
{
void buildWall();
}
Kemampuan untuk «membangun tembok». Memahami perintah «membangun tembok» (memiliki metode yang sesuai).
static class WorkerRobot implements WallBuilder
{
void buildWall()
 {
…
 }
}
static class GuardRobot implements WallBuilder
{
void buildWall()
 {
…
 }
}
static class WateringCan
{
…
}
Robot yang memiliki kemampuan/skill ini.

Pengairan tidak dapat membangun dinding (tidak mengimplementasikan antarmuka WallBuilder).

public static void main(String[] args)
{
 //add all robots to a list
 ArrayList robots = new ArrayList();
 robots.add(new WorkerRobot());
 robots.add(new GuardRobot());
 robots.add(new WateringCan());

 //build a wall if you can
 for (Object robot: robots)
 {
  if (robot instanceof WallBuilder)
  {
   WallBuilder builder = (WallBuilder) robot;
   builder.buildWall();
   }
  }
 }
}
Bagaimana kita memberi perintah untuk membangun tembok?

"Itu sangat menarik. Saya tidak pernah bermimpi bahwa antarmuka bisa menjadi topik yang begitu menarik."

"Dan kemudian beberapa! Bersama dengan polimorfisme, itu benar-benar menakjubkan."