যেমন, ধরা যাক, animal একটা class. এর sub-class হল mammal, reptile. আবার dog হচ্ছে mammal এর sub-class.
Inheritance এর কথায় আসলে সবচেয়ে পরিচিত শব্দ কথা হল extends and implements.
এই শব্দ গুলো দ্বারা একটা অবজেক্ট এর উপাদান গুলো অন্য অবজেক্ট এর হয়ে যায়। এটা IS-A type.. যেমন, dog IS-A mammal. এটা বলার অর্থ হল, dog এর কিছু নিজস্ব বৈশিষ্ট্য আছে। কিন্তু এটা একই সাথে mammal হওয়ার কারনে mammal এর বৈশিষ্ট্যগুলও dog এর আছে। কোডীং এর ভাষায় আরও সুন্দর করে বলা যায়।
public class Animal{ } public class Mammal extends Animal{ } public class Reptile extends Animal{ } public class Dog extends Mammal{ }
উপরের কোড এর কারনে নিজের বাক্যগুলো সত্যঃ
Animal is the superclass of Mammal class.
Animal is the superclass of Reptile class.
Mammal and Reptile are subclasses of Animal class.
Dog is the subclass of both Mammal and Animal classes.
- Mammal IS-A Animal
- Reptile IS-A Animal
- Dog IS-A Mammal
- Hence : Dog IS-A Animal as well
একটা কোড দেখা যাকঃ
public class Vehicle{} public class Speed{} public class Van extends Vehicle{ private Speed sp; }দেখুন, এখানে তিনটা ক্লাশ আছে। Vehicle, Speed & Van. আর IS-A relationship ও ইউজ করা আছে। মানে, Van IS-A Vehicle.
আর মজার ব্যাপার হল, এই Van ক্লাস এর ভেতরে একটা Speed টাইপ অবজেক্ট আছে। এর মানে, Van এরও Speed ক্লাশ এর উপাদান গুলো আছে। কিন্তু এর জন্য ওই ক্লাশ এর কোড গুলো আলাদা ভাবে ভ্যান এ লিখতে হবে না। একটা অবজেক্ট ক্রিয়েট করেলেই HAS-A Relationship creat হয়ে গেল। একই সাথে Speed Van এরও হয়ে গেল।
একটা কথা বলতে ভুলে গেছি। বংশগতি থেকে দেখা যায়, একটা subclass এর superclass একটাই হয়। একটার বেশি সম্ভব না। সহজ ভাবে বলতে গেলে একটা সন্তান একটা parents থেকেই হয়। কিন্তু একটা parents থেকে একাধিক সন্তান হতেই পারে।
ঠিক তেমনি একটা ক্লাশ একটার বেশি ক্লাশকে Extends করতে পারে না। যেমনঃ
public class extends Animal, Mammal{}এটা ভুল।
আর আমার কোন ভুল থাকলে অবশ্যই কমেন্ট করবেন। শুধরে নেওয়ার চেষ্টা করব।