"Halo, Amigo! Iki aku-maneh. Aku pengin menehi sudut pandang liyane babagan antarmuka. Sampeyan ndeleng, biasane kelas minangka model obyek tartamtu. Ing kontras, antarmuka luwih kaya kemampuan obyek utawa peran, tinimbang obyek kasebut dhewe."

Contone, barang kayata mobil, sepedha, sepedha motor, lan roda paling apik dituduhake minangka kelas lan obyek. Nanging kabisan, kaya «Aku bisa mindhah», «Aku bisa nindakake wong», lan «Aku bisa parkir», luwih apik dituduhake minangka antarmuka. Priksa conto iki:

kode Jawa Katrangan
interface Moveable
{
void move(String newAddress);
}
Cocog karo kemampuan kanggo mindhah.
interface Driveable
{
void drive(Driver driver);
}
Cocog karo kemampuan kanggo mindhah.
interface Transport
{
void addStuff(Object stuff);
Object removeStuff();
}
Cocog karo kemampuan kanggo nggawa kargo.
class Wheel implements Moveable
{
...
}
Kelas "roda". Nduweni kemampuan kanggo mindhah.
class Car implements Moveable, Drivable, Transport
{
...
}
Kelas "mobil". Nduweni kemampuan kanggo mindhah, didorong dening wong, lan nggawa barang.
class Skateboard implements Moveable, Driveable
{
...
}
Kelas "skateboard". Nduweni kemampuan kanggo mindhah lan dikontrol dening wong.

Antarmuka banget nyederhanakake urip programer. Program asring duwe ewu obyek, atusan kelas, lan mung sawetara lusin antarmuka (peran). Ana sawetara peran, nanging bisa digabungake kanthi pirang-pirang cara (kelas).

Intine yaiku sampeyan ora kudu nulis kode sing nemtokake interaksi karo saben kelas liyane. Sampeyan mung kudu sesambungan karo peran (antarmuka).

Bayangake sampeyan minangka tukang robot. Sampeyan duwe puluhan robot bawahan lan saben wong bisa duwe sawetara katrampilan. Upaminipun sampeyan kudu urgent rampung mbangun tembok. Sampeyan mung njupuk kabeh robot sing duwe kemampuan kanggo "mbangun" lan ngandhani wong-wong mau kanggo mbangun tembok. Sampeyan ora peduli karo robot sing nindakake. Ayo dadi robot banyu bisa. Yen ngerti carane mbangun, ayo mbangun.

Mangkene carane katon ing kode:

kode Jawa Katrangan
static interface WallBuilder
{
void buildWall();
}
Kemampuan kanggo "mbangun tembok". Ngerti printah «mbangun tembok» (duwe cara sing cocok).
static class WorkerRobot implements WallBuilder
{
void buildWall()
 {
…
 }
}
static class GuardRobot implements WallBuilder
{
void buildWall()
 {
…
 }
}
static class WateringCan
{
…
}
Robot sing duwe kemampuan / skill iki.

A mbanyoni ora bisa mbangun tembok (ora ngleksanakake 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();
   }
  }
 }
}
Kepiye carane kita menehi perintah kanggo mbangun tembok?

"Sing apik tenan menarik. Aku tau ngimpi sing antarmuka bisa dadi topik menarik."

"Lan sawetara! Bebarengan karo polymorphism, iku babar blas pikiran-ndamu."