"Helo, Amigo! Ini saya—sekali lagi. Saya ingin memberi anda satu lagi sudut pandangan tentang antara muka. Anda lihat, kebanyakan masa kelas adalah model objek tertentu. Sebaliknya, antara muka lebih seperti kebolehan objek atau peranan, bukannya objek itu sendiri."

Contohnya, perkara seperti kereta, basikal, motosikal dan roda paling baik digambarkan sebagai kelas dan objek. Tetapi kebolehan mereka, seperti «Saya boleh bergerak», «Saya boleh membawa orang», dan «Saya boleh meletak kereta», lebih baik digambarkan sebagai antara muka. Lihat contoh ini:

kod Java Penerangan
interface Moveable
{
void move(String newAddress);
}
Sesuai dengan keupayaan untuk bergerak.
interface Driveable
{
void drive(Driver driver);
}
Sesuai dengan keupayaan untuk bergerak.
interface Transport
{
void addStuff(Object stuff);
Object removeStuff();
}
Sesuai dengan keupayaan membawa kargo.
class Wheel implements Moveable
{
...
}
Kelas "roda". Mempunyai keupayaan untuk bergerak.
class Car implements Moveable, Drivable, Transport
{
...
}
Kelas "kereta". Mempunyai keupayaan untuk bergerak, dipandu oleh seseorang, dan membawa kargo.
class Skateboard implements Moveable, Driveable
{
...
}
Kelas "papan luncur". Mempunyai keupayaan untuk bergerak dan dikawal oleh seseorang.

Antara muka sangat memudahkan kehidupan pengaturcara. Program selalunya mempunyai beribu-ribu objek, beratus-ratus kelas, dan hanya beberapa dozen antara muka (peranan). Terdapat sedikit peranan, tetapi mereka boleh digabungkan dalam banyak cara (kelas).

Intinya ialah anda tidak perlu menulis interaksi penentu kod dengan setiap kelas lain. Apa yang anda perlu lakukan ialah berinteraksi dengan peranan (antara muka).

Bayangkan anda seorang pembina robotik. Anda mempunyai berpuluh-puluh robot bawahan dan setiap daripada mereka boleh mempunyai pelbagai kemahiran. Katakan anda perlu segera menyelesaikan pembinaan dinding. Anda hanya mengambil semua robot yang mempunyai keupayaan untuk "membina" dan memberitahu mereka untuk membina dinding. Anda tidak kisah robot mana yang melakukannya. Biarkan ia menjadi tin air robot. Jika ia tahu membina, biarkan ia membina.

Begini rupanya dalam kod:

kod Java Penerangan
static interface WallBuilder
{
void buildWall();
}
Keupayaan untuk «membina tembok». Memahami arahan «bina tembok» (mempunyai kaedah yang sesuai).
static class WorkerRobot implements WallBuilder
{
void buildWall()
 {
…
 }
}
static class GuardRobot implements WallBuilder
{
void buildWall()
 {
…
 }
}
static class WateringCan
{
…
}
Robot yang mempunyai kebolehan/kemahiran ini.

Penyiraman tidak boleh membina dinding (ia tidak melaksanakan antara muka 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();
   }
  }
 }
}
Bagaimanakah kita memberi arahan untuk membina tembok?

"Itu sangat menarik. Saya tidak pernah bermimpi bahawa antara muka boleh menjadi topik yang menarik."

"Dan kemudian beberapa! Bersama-sama dengan polimorfisme, ia benar-benar mengagumkan."