"नमस्कार, अमीगो! यह मैं हूं—फिर से। मैं आपको इंटरफेस पर एक और दृष्टिकोण देना चाहता हूं। आप देखते हैं, ज्यादातर समय एक वर्ग किसी विशेष वस्तु का एक मॉडल होता है। इसके विपरीत, इंटरफेस किसी वस्तु की क्षमताओं या वस्तु के बजाय भूमिकाएँ।"

उदाहरण के लिए, कार, साइकिल, मोटरसाइकिल और पहिए जैसी चीजें कक्षाओं और वस्तुओं के रूप में सबसे अच्छी तरह से प्रस्तुत की जाती हैं। लेकिन उनकी क्षमताएं, जैसे "मैं स्थानांतरित कर सकता हूं", "मैं लोगों को ले जा सकता हूं", और "मैं पार्क कर सकता हूं", इंटरफेस के रूप में बेहतर प्रतिनिधित्व करते हैं। इस उदाहरण को देखें:

जावा कोड विवरण
interface Moveable
{
void move(String newAddress);
}
स्थानांतरित करने की क्षमता के अनुरूप।
interface Driveable
{
void drive(Driver driver);
}
स्थानांतरित करने की क्षमता के अनुरूप।
interface Transport
{
void addStuff(Object stuff);
Object removeStuff();
}
कार्गो ले जाने की क्षमता के अनुरूप।
class Wheel implements Moveable
{
...
}
एक «पहिया» वर्ग। हिलने की क्षमता रखता है।
class Car implements Moveable, Drivable, Transport
{
...
}
एक «कार» वर्ग। स्थानांतरित करने, एक व्यक्ति द्वारा संचालित होने और कार्गो ले जाने की क्षमता है।
class Skateboard implements Moveable, Driveable
{
...
}
एक «स्केटबोर्ड» वर्ग। किसी व्यक्ति द्वारा स्थानांतरित करने और नियंत्रित करने की क्षमता है।

इंटरफेस प्रोग्रामर के जीवन को बहुत सरल करते हैं। कार्यक्रमों में अक्सर हजारों वस्तुएं, सैकड़ों वर्ग और बस कुछ दर्जन इंटरफेस (भूमिकाएं) होते हैं। कुछ भूमिकाएँ हैं, लेकिन उन्हें कई तरीकों (कक्षाओं) में जोड़ा जा सकता है।

पूरी बात यह है कि आपको हर दूसरे वर्ग के साथ बातचीत को परिभाषित करने वाला कोड नहीं लिखना है। आपको बस इतना करना है कि भूमिकाओं (इंटरफेस) के साथ बातचीत करें।

कल्पना कीजिए कि आप एक रोबोट निर्माता हैं। आपके पास दर्जनों अधीनस्थ रोबोट हैं और उनमें से प्रत्येक के पास कई कौशल हो सकते हैं। मान लीजिए कि आपको दीवार बनाने की तत्काल आवश्यकता है। आप बस उन सभी रोबोटों को लें जिनमें "निर्माण" करने की क्षमता है और उन्हें दीवार बनाने के लिए कहें। आप वास्तव में परवाह नहीं करते कि कौन से रोबोट इसे करते हैं। इसे एक रोबोटिक वाटरिंग कैन होने दें। अगर यह जानता है कि कैसे बनाना है, तो इसे बनाने दो।

यहां बताया गया है कि यह कोड में कैसा दिखेगा:

जावा कोड विवरण
static interface WallBuilder
{
void buildWall();
}
«एक दीवार बनाने» की क्षमता। आदेश «एक दीवार का निर्माण» (उपयुक्त विधि है) को समझता है।
static class WorkerRobot implements WallBuilder
{
void buildWall()
 {
…
 }
}
static class GuardRobot implements WallBuilder
{
void buildWall()
 {
…
 }
}
static class WateringCan
{
…
}
रोबोट जिनके पास यह क्षमता/कौशल है।

एक पानी एक दीवार का निर्माण नहीं कर सकता (यह वॉलबिल्डर इंटरफ़ेस को लागू नहीं करता है)।

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();
   }
  }
 }
}
हम दीवार बनाने का आदेश कैसे दे सकते हैं?

"यह आश्चर्यजनक रूप से दिलचस्प है। मैंने कभी सपने में भी नहीं सोचा था कि इंटरफेस इतना दिलचस्प विषय हो सकता है।"

"और फिर कुछ! बहुरूपता के साथ, यह पूरी तरह से आश्चर्यजनक है।"