"Hei, Amigo! Det er meg - igjen. Jeg vil gi deg et annet synspunkt på grensesnitt. Du skjønner, mesteparten av tiden er en klasse en modell av et bestemt objekt. Derimot er grensesnitt mer som et objekts evner eller roller, i stedet for selve objektet."

For eksempel er ting som biler, sykler, motorsykler og hjul best representert som klasser og objekter. Men deres evner, som «jeg kan bevege meg», «jeg kan bære folk» og «jeg kan parkere», er bedre representert som grensesnitt. Sjekk ut dette eksemplet:

Java-kode Beskrivelse
interface Moveable
{
void move(String newAddress);
}
Tilsvarer evnen til å bevege seg.
interface Driveable
{
void drive(Driver driver);
}
Tilsvarer evnen til å bevege seg.
interface Transport
{
void addStuff(Object stuff);
Object removeStuff();
}
Tilsvarer evnen til å frakte last.
class Wheel implements Moveable
{
...
}
En «hjul»-klasse. Har evnen til å bevege seg.
class Car implements Moveable, Drivable, Transport
{
...
}
En «bil»-klasse. Har evnen til å bevege seg, bli kjørt av en person og frakte last.
class Skateboard implements Moveable, Driveable
{
...
}
En «skateboard»-time. Har evnen til å bevege seg og bli kontrollert av en person.

Grensesnitt forenkler livet til programmereren betydelig. Programmer har veldig ofte tusenvis av objekter, hundrevis av klasser og bare et par dusin grensesnitt (roller). Det er få roller, men de kan kombineres på mange måter (klasser).

Hele poenget er at du ikke trenger å skrive kode som definerer interaksjon med annenhver klasse. Alt du trenger å gjøre er å samhandle med roller (grensesnitt).

Tenk deg at du er en robotbygger. Du har dusinvis av underordnede roboter, og hver av dem kan ha flere ferdigheter. Anta at du snarest må fullføre å bygge en vegg. Du tar bare alle robotene som har evnen til å "bygge" og ber dem bygge muren. Du bryr deg egentlig ikke om hvilke roboter som gjør det. La det være en robot vannkanne. Hvis den vet hvordan den skal bygge, la den bygge.

Slik vil det se ut i kode:

Java-kode Beskrivelse
static interface WallBuilder
{
void buildWall();
}
Evne til å «bygge en vegg». Forstår kommandoen «bygg en vegg» (har riktig metode).
static class WorkerRobot implements WallBuilder
{
void buildWall()
 {
…
 }
}
static class GuardRobot implements WallBuilder
{
void buildWall()
 {
…
 }
}
static class WateringCan
{
…
}
Roboter som har denne evnen/ferdigheten.

En vannkanne kan ikke bygge en vegg (den implementerer ikke WallBuilder-grensesnittet).

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();
   }
  }
 }
}
Hvordan gir vi kommandoen om å bygge en mur?

"Det er utrolig interessant. Jeg hadde aldri drømt om at grensesnitt kunne være et så interessant tema."

"Og litt til! Sammen med polymorfisme er det helt utrolig."