ইনহেরিটেন্স অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং (OOP)-এর একটি মূল ধারণা। এটি একটি IS-A সম্পর্ক প্রকাশ করে। প্রোগ্রামিংয়ে এর অর্থ হুবহু ইংরেজিতে যেভাবে বোঝায় সেভাবেই: প্যারেন্ট থেকে বৈশিষ্ট্য উত্তরাধিকারসূত্রে পাওয়া (প্রোগ্রামিংয়ে বৈশিষ্ট্য সাধারণত ফাংশন ও ভ্যারিয়েবল হয়)।
নিচে দেখানো মতো একটি Animal ক্লাস ধরুন,
//Creating an Animal class with bark() as a member function.
public class Animal {
public void bark() {
System.out.println("This is an animal");
}
}
Animal একটি প্যারেন্ট ক্লাস, কারণ এই ক্লাসের বৈশিষ্ট্যগুলো সাধারণভাবে সব প্রাণীতে এক্সটেন্ড করা যায়।
এখন Lion নামের একটি প্রাণী ধরুন, যার ক্লাসটি দেখতে এমন,
//Lion class is a child class of Animal.
public class Lion extends Animal {
@Override
public void bark() {
System.out.println("Lion here!!");
}
}
Override অ্যানোটেশনটি বোঝায় যে সাবক্লাসের একটি মেথড তার সুপারক্লাসের একটি মেথড ওভাররাইড করছে।
এটি কঠোরভাবে জরুরি নয়, তবে এটি ব্যবহার করা একটি ভালো অভ্যাস।
এখন যখনই আমরা এটা করি,
Animal animal = new Lion(); //creating instance of Animal, of type Lion
animal.bark();
লক্ষ করুন: এখানে Animal ক্লাসটি Lion দিয়ে ইনিশিয়ালাইজ করা হচ্ছে।
আউটপুট দেখতে এমন হবে
Lion here!!
OOP অনুযায়ী ইনহেরিটেন্সের অনেক ধরন আছে, তবে Java এর মধ্যে কয়েকটিই সাপোর্ট করে (মাল্টি-লেভেল ও হায়ারার্কিক্যাল)। এটি নিয়ে আরও পড়তে, অনুগ্রহ করে এটি পড়ুন।
এই অনুশীলনীতে আপনি একটি রোল-প্লেয়িং গেম খেলছেন, যেখানে বিভিন্ন ধরনের যোদ্ধা একে অপরের সাথে লড়াই করতে পারে। এই গেমে প্রতিটি ধরনের যোদ্ধার জন্য আলাদা নিয়ম রয়েছে। আমরা দুটি নির্দিষ্ট ধরনের দিকে মনোযোগ দেব: Wizard এবং Warrior।
Warrior-এর জন্য নিয়মগুলি হলো:
6 পয়েন্ট ড্যামেজ দেয়।10 পয়েন্ট ড্যামেজ দেয়।Wizard-এর জন্য নিয়মগুলি হলো:
12 পয়েন্ট ড্যামেজ দেয়।3 পয়েন্ট ড্যামেজ দেয়।Warrior নামে একটি নতুন ক্লাস তৈরি করুন।
এই ক্লাসটি বিদ্যমান Fighter ক্লাস থেকে ইনহেরিট করবে।
Warrior ক্লাসটি এমনভাবে আপডেট করুন যাতে এর toString() মেথডটি বর্ণনা করে এটি কী ধরনের যোদ্ধা।
মেথডটি "Fighter is a Warrior" স্ট্রিংটি রিটার্ন করবে।
Warrior warrior = new Warrior();
warrior.toString();
// => "Fighter is a Warrior"
Warrior ক্লাসটি এমনভাবে আপডেট করুন যাতে এর isVulnerable() মেথডটি সর্বদা false রিটার্ন করে।
Warrior warrior = new Warrior();
warrior.isVulnerable();
// => false
Warrior ক্লাসটি এমনভাবে আপডেট করুন যাতে এর getDamagePoints(Fighter) মেথডটি উপরের নিয়ম অনুযায়ী Warrior-এর দেওয়া ড্যামেজ হিসাব করে।
Warrior warrior = new Warrior();
Wizard wizard = new Wizard();
warrior.getDamagePoints(wizard);
// => 10
Wizard নামে আরেকটি নতুন ক্লাস তৈরি করুন।
এই ক্লাসটিও বিদ্যমান Fighter ক্লাস থেকে ইনহেরিট করবে।
Wizard ক্লাসটি এমনভাবে আপডেট করুন যাতে এর toString() মেথডটি বর্ণনা করে এটি কী ধরনের যোদ্ধা।
মেথডটি "Fighter is a Wizard" স্ট্রিংটি রিটার্ন করবে।
Wizard wizard = new Wizard();
wizard.toString();
// => "Fighter is a Wizard"
Wizard ক্লাসটি আপডেট করে prepareSpell() নামে একটি মেথড যোগ করুন।
ক্লাসটির মনে রাখা উচিত কখন এই মেথডটি কল করা হয়, এবং নিশ্চিত করা উচিত যে এর isVulnerable() মেথডটি false রিটার্ন করে কেবল তখনই, যখন একটি স্পেল প্রস্তুত থাকে।
Wizard wizard = new Wizard();
wizard.prepareSpell();
wizard.isVulnerable();
// => false
Wizard ক্লাসটি এমনভাবে আপডেট করুন যাতে এর getDamagePoints(Fighter) মেথডটি উপরের নিয়ম অনুযায়ী Wizard-এর দেওয়া ড্যামেজ হিসাব করে।
Wizard wizard = new Wizard();
Warrior warrior = new Warrior();
wizard.prepareSpell();
wizard.getDamagePoints(warrior);
// => 12
Exercism-এ সাইন আপ করুন, Java ট্র্যাকের 26টি কনসেপ্ট158টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।