অনেক সময় দেখো না যে বাবার গায়ের রং কালো ছেলের গায়ের রংও কালো, বাবার রাগ বেশি ছেলেরও রাগ বেশি, মায়ের চুল অনেক লম্বা মেয়ের চুলও অনেক লম্বা, মা খুব সুন্দর মেয়েও খুব সুন্দর। এরকম ব্যাপার তো অহরহই চোখে পড়ে।
বাস্তব জীবনে এটাই ইনহেরিট্যান্স(Inheritance) অর্থাৎ উত্তরাধিকার সূত্রে পাওয়া কিছু বৈশিষ্ট্য। OOP তেও ইনহেরিট্যান্স ব্যাপারটা এরকমই। যখন কোন নতুন ক্লাশকে তুমি অন্য কোন ক্লাশের চাইল্ড ক্লাশ(Child Class) বানাবে তখন ওই নতুন ক্লাশটি আগের ক্লাশের বৈশিষ্ট্যগুলো পেয়ে যায়। আগের ক্লাশটিকে তখন বলা হয় প্যারেন্ট ক্লাশ(Parent Class)। আর এখানে বৈশিষ্ট্য পাওয়া বলতে বুঝানো হচ্ছে প্যারেন্ট ক্লাশ এর ভেরিয়েবল এবং মেথড। অর্থাৎ যখন তুমি নতুন কোন ক্লাশকে অন্য কোন ক্লাশের চাইল্ড বানাবে তখন নতুন ক্লাশটি ওই ক্লাশের সমস্ত ভেরিয়েবল এবং মেথডকে পেয়ে যাবে।
তাহলে দেখি আমরা কিভাবে কাজটি করা যায়। আমাদের তো BasicCar নামে একটি ক্লাশ ছিলো। আমরা এখন নতুন একটি ডিজাইনের কার তৈরী করবো। ধরো সেই কারের নাম দিলাম Bronox। তাহলে BronoxCar নামে একটি নতুন ক্লাশ বানিয়ে ফেলি আগের মতই, আগে যেভাবে নতুন ক্লাশ বানিয়েছিলাম।

নতুন একটি ক্লাশ তৈরী হয়ে গেল BronoxCar নামে। এখন এই ক্লাশটিকে যদি আমরা BasicCar ক্লাশের Child বানাতে চাই তাহলে সিম্পলি BasicCar ক্লাশটিকে এই ক্লাশে Extend করতে হবে।
দেখো এরকমভাবে:

ব্যস কাজ শেষ। এখন BasicCar ক্লাশের যত মেথড এবং ভেরিয়েবল আছে সব কিন্তু BronoxCar ক্লাশটি পেয়ে গেছে। এবং BronoxCar ক্লাশে দেখো আমরা কিন্তু কোন কোডই লিখি নি। কিন্তু যখনই আমরা BronoxCar ক্লাশটির অবজেক্ট বানাবো দেখবো যে BasicCar ক্লাশের যত মেথড এবং ভেরিয়েবল ছিল সবই আমরা এ্যাকসেস করতে পারছি। চলো বিষয়টি পরীক্ষা করে দেখি।
প্রথমেই AmraSobaiProgrammer ক্লাশের main মেথডের মধ্যে BronoxCar ক্লাশের একটি অবজেক্ট বানাই।

আমরা তো দেখেছিলাম যে কোন একটি ক্লাশের অবজেক্ট বানানোর পর সেই ক্লাশের কোন মেথড বা ভেরিয়েবলে এ্যাকসেস পেতে গেলে অবজেক্টের নামের পরে একটা ডট(.) ব্যবহার করে তারপর মেথড বা ভেরিয়েবলের নামটি লিখতে হয় তাই না?
তাহলে আমরা এখন BronoxCar ক্লাশের একটি অবজেক্ট বানিয়েছি
এবং বলেছি যে যেহেতু এটি BasicCar ক্লাশের চাইল্ড(BasicCar ক্লাশকে BronoxCar ক্লাশে Extend করা হয়েছে)
সুতরাং BronoxCar ক্লাশের কোন অবজেক্ট BasicCar ক্লাশের যে কোন ভেরিয়েবল বা মেথডকে পেয়ে যাবে।
তাহলে তো BronoxCarObject1 এর পরে ডট(.) দিয়ে BasicCar ক্লাশের যে কোন মেথড বা ভেরিয়েবলকে পাবার কথা তাই না?
এসো দেখি:

এবং আউটপুটটা দেখো:

এখানে তীর চিহ্ন দিয়ে দেখানো যতগুলো মেথড এবং ভেরিয়েবল আমরা BronoxCar ক্লাশের অবজেক্ট থেকে কল করেছি সবগুলোই কিন্তু BasicCar ক্লাশের মেথড এবং ভেরিয়েবল। এবং আমাদের BronoxCar ক্লাশে কিন্তু কোন কোডই এ পর্যন্ত লেখা হয় নি। সুতরাং BasicCar ক্লাশকে BronoxCar ক্লাশে শুধু Extend করার কারণে BasicCar ক্লাশের সব ভেরিয়েবল এবং মেথড BronoxCar ক্লাশটি পেয়ে গেছে।
আর খুব সিম্পলি এটিই হচ্ছে OOP তে ইনহেরিট্যান্স(Inheritance)।
খেয়াল করে দেখো আমরা আগে বলেছিলাম যে, কার ডিজাইনারের কাছে যদি বেসিক কারের একটা ডিজাইন করা থাকে এবং পরবর্তীতে নতুন ডিজাইনের কার তৈরী করার দরকার হয়, তাহলে সে নিচের তিনটি কাজ করতে পারে:
১. ওই বেসিক ফিচারগুলো নিয়েই একটা কার বানিয়ে ফেলা যেতে পারে।
২. নতুন আরো ফিচার বা ফাংশনালিটি(কিছু করার ক্ষমতা) যোগ করতে পারে। যেমন: কার এ সিডি প্লেয়ার থাকবে, ব্যাক ক্যামেরা থাকবে, এয়ার ব্যাগ থাকবে, রেডিও থাকবে, এসি থাকবে, জাম্প করতে পারবে ইত্যাদি।
৩. কমন ফিচারগুলোতে নতুন ফ্যাসিলিটি যোগ করতে পারে। যেমন: চাকা আরো শক্তিশালী করলো(চাকাতে নতুন ফ্যাসিলিটি যোগ করলো), সিটের ডিজাইন আরো সুন্দর করলো(সিটে নতুন ফ্যাসিলিটি যোগ করলো), অনাকাঙ্খিতভাবে কোন কিছু কারের সামনে এলে কারটি হার্ড ব্রেক করবে(ব্রেক এ নতুন ফ্যাসিলিটি যোগ করলো), কারের সর্বোচ্চ গতি বাড়িয়ে দিলো(কারের চলতে পারার ক্ষমতাতে নতুন ফ্যাসিলিটি যোগ করলো), হুইসেলের সাউন্ডটা আরো নমনীয় করলো যাতে কানে সহনীয় হয়(হুইসেল দেবার ক্ষমতাতে নতুন ফ্যাসিলিটি যোগ করলো)
১. নাম্বার তো আমরা ইতোমধ্যেই করে ফেললাম BasicCar কে Extend করে BronoxCar বানালাম যার সব বৈশিষ্ট্য বেসিক কারের মতই।
এখন আমাদের ডিজাইনের প্রয়োজন নতুন কিছু ফিচার যোগ করা। (নাম্বার ২)
তাহলে আমরা সেই ফিচারগুলো যোগ করে ফেলি BronoxCar ক্লাশে।
কার এ সিডি প্লেয়ার থাকবে, ব্যাক ক্যামেরা থাকবে, এয়ার ব্যাগ থাকবে, রেডিও থাকবে, এসি থাকবে।

এছাড়াও নতুন কারটি জাম্প করতে পারবে, এটা তো ফাংশনালিটি বা কিছু করার ক্ষমতা তাই আমাদের একটি মেথড বানাতে হবে।

এখন আমাদের BronoxCar ক্লাশে BasicCar ক্লাশের সব মেথড এবং ভেরিয়েবল আছে এবং এখন যা যোগ করলাম সেগুলোও আছে।
এখন আমাদের ডিজাইনের প্রয়োজন কমন ফিচারগুলোতে নতুন ফ্যাসিলিটি যোগ করা। (নাম্বার ৩)
চাকা আরো শক্তিশালী করা(চাকাতে নতুন ফ্যাসিলিটি যোগ করা), সিটের ডিজাইন আরো সুন্দর করা(সিটে নতুন ফ্যাসিলিটি যোগ করা)
এই দুটোর জন্য আমাদের wheel এরব seat দুটি ভেরিয়েবল এর মান নতুন করে এ্যাসাইন করতে হবে BronoxCar ক্লাশে।

এরপর আরো কিছু ব্যাপার ছিলো। যেমন: অনাকাঙ্খিতভাবে কোন কিছু কারের সামনে এলে কারটি হার্ড ব্রেক করবে(ব্রেক এ নতুন ফ্যাসিলিটি যোগ করা), কারের সর্বোচ্চ গতি বাড়িয়ে দিলো(কারের চলতে পারার ক্ষমতাতে নতুন ফ্যাসিলিটি যোগ করা), হুইসেলের সাউন্ডটা আরো নমনীয় করলো যাতে কানে সহনীয় হয়(হুইসেল দেবার ক্ষমতাতে নতুন ফ্যাসিলিটি যোগ করা)
BasicCar এ breakCar, runCar এবং whistle নামে তিনটি মেথড আগে থেকেই আছে। যেগুলো ইনহেরিটেন্স ফিচারের বদৌলতে এখন BronoxCar ক্লাশেও আছে। এখন আমাদের দরকার আসলে তিনটি ফ্যাসিলিটি যোগ করার জন্য ওই তিনটি মেথড মডিফাই করা।
আর এটা করার জন্য আমাদের মেথড ওভাররাইডিং(Method Overriding) বুঝতে হবে। মেথড ওভাররাইডিং আমরা পরবর্তী পলিমরফিজম(Ploymorphism) চ্যাপ্টারেই আলোচনা করবো।