"হ্যালো, অ্যামিগো! এটা আমি-আবারও। আমি আপনাকে ইন্টারফেস সম্পর্কে আরেকটি দৃষ্টিভঙ্গি দিতে চাই। আপনি দেখতে পাচ্ছেন, বেশিরভাগ সময় একটি ক্লাস একটি নির্দিষ্ট বস্তুর একটি মডেল। বিপরীতে, ইন্টারফেসগুলি একটি বস্তুর ক্ষমতার মতো বা বস্তুর পরিবর্তে ভূমিকা।"

উদাহরণস্বরূপ, গাড়ি, বাইসাইকেল, মোটরসাইকেল এবং চাকার মতো জিনিসগুলি ক্লাস এবং অবজেক্ট হিসাবে সেরাভাবে উপস্থাপন করা হয়। কিন্তু তাদের ক্ষমতা, যেমন "আমি নড়াচড়া করতে পারি", "আমি মানুষকে বহন করতে পারি", এবং "আমি পার্ক করতে পারি", ইন্টারফেস হিসাবে আরও ভালভাবে উপস্থাপন করা হয়। এই উদাহরণ দেখুন:

জাভা কোড বর্ণনা
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();
   }
  }
 }
}
আমরা কিভাবে একটি প্রাচীর নির্মাণের আদেশ দেব?

"এটি আশ্চর্যজনকভাবে আকর্ষণীয়। আমি কখনো স্বপ্নেও ভাবিনি যে ইন্টারফেসগুলি এমন একটি আকর্ষণীয় বিষয় হতে পারে।"

"এবং তারপরে কিছু! একসাথে বহুরূপবাদের সাথে, এটি সম্পূর্ণরূপে মন ফুঁকছে।"