"हॅलो, अमिगो! तो मीच आहे-पुन्हा. मी तुम्हाला इंटरफेसवर आणखी एक दृष्टिकोन देऊ इच्छितो. तुम्ही पहा, बहुतेक वेळा वर्ग हा एखाद्या विशिष्ट ऑब्जेक्टचे मॉडेल असतो. याउलट, इंटरफेस हे ऑब्जेक्टच्या क्षमतेसारखे असतात किंवा वस्तू ऐवजी भूमिका."

उदाहरणार्थ, कार, सायकली, मोटारसायकल आणि चाके यासारख्या गोष्टी वर्ग आणि वस्तू म्हणून उत्तम प्रकारे दर्शवल्या जातात. परंतु त्यांच्या क्षमता, जसे की “मी हलवू शकतो”, “मी लोकांना घेऊन जाऊ शकतो” आणि “मी पार्क करू शकतो”, इंटरफेस म्हणून अधिक चांगल्या प्रकारे दर्शविले जाते. हे उदाहरण पहा:

जावा कोड वर्णन
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();
   }
  }
 }
}
आम्ही भिंत बांधण्याची आज्ञा कशी देऊ?

"हे आश्चर्यकारकपणे मनोरंजक आहे. इंटरफेस इतका मनोरंजक विषय असू शकतो असे मी स्वप्नातही पाहिले नव्हते."

"आणि मग काही! पॉलीमॉर्फिझमसह, ते पूर्णपणे मनाला भिडणारे आहे."