"ஹலோ, அமிகோ! இது நான் தான்-மீண்டும். இடைமுகங்களைப் பற்றிய மற்றொரு பார்வையை நான் உங்களுக்கு வழங்க விரும்புகிறேன். நீங்கள் பார்க்கிறீர்கள், பெரும்பாலான நேரங்களில் ஒரு வகுப்பு என்பது ஒரு குறிப்பிட்ட பொருளின் மாதிரியாகும். மாறாக, இடைமுகங்கள் ஒரு பொருளின் திறன்களைப் போன்றது அல்லது பொருளைக் காட்டிலும் பாத்திரங்கள்."

எடுத்துக்காட்டாக, கார்கள், சைக்கிள்கள், மோட்டார் சைக்கிள்கள் மற்றும் சக்கரங்கள் போன்றவை வகுப்புகள் மற்றும் பொருள்களாக சிறப்பாகக் குறிப்பிடப்படுகின்றன. ஆனால் அவர்களின் திறன்களான "என்னால் நகர முடியும்", "நான் மக்களை கொண்டு செல்ல முடியும்" மற்றும் "நான் நிறுத்த முடியும்" போன்றவை இடைமுகங்களாக சிறப்பாக குறிப்பிடப்படுகின்றன. இந்த உதாரணத்தைப் பாருங்கள்:

ஜாவா குறியீடு விளக்கம்
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
{}
இந்த திறன்/திறன் கொண்ட ரோபோக்கள்.

ஒரு நீர்ப்பாசனம் ஒரு சுவரை உருவாக்க முடியாது (இது 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();
   }
  }
 }
}
சுவர் கட்டுவதற்கான கட்டளையை எவ்வாறு வழங்குவது?

"இது மிகவும் சுவாரஸ்யமானது. இடைமுகங்கள் ஒரு சுவாரஸ்யமான தலைப்பாக இருக்கும் என்று நான் கனவிலும் நினைக்கவில்லை."

"பின்னர் சிலர்! பாலிமார்பிஸத்துடன் சேர்ந்து, இது முற்றிலும் மனதைக் கவரும்."