যে মেথডের কোন বডি থাকেনা সেটাই হল অ্যাবস্ট্রেক্ট মেথড। আর যে ক্লাসে অ্যাবস্ট্রেক্ট মেথড থাকে সেই ক্লাসই অ্যাবস্ট্রেক্ট ক্লাস। অ্যাবস্ট্রেক্ট মেথড দেখতে ঠিক এরকম-
public abstract void exampleOfAbstracMethod();
তো কথা হল যে মেথডের বডিই নাই সেই মেথডের লেখারই কি দরকার? আমাদের সেই বিখ্যাত Animal এবং Human ক্লাসের উদাহরনটায় ফেরত যাই। Animal ক্লাসে লিখেছিলাম Animal রা হাটতে পারে কিন্তু বিষয়টা ক্লিয়ার না। কারন পৃথিবীতে হাজার হাজার প্রাণী আছে সব প্রানীর হাটা ধরন এক না বা সবার পায়ের সংখ্যা সমান না। তার মানে হল এই মেথডটার বডিতে কি লিখতে হবে আমরা নিশ্চিৎ না। যে কারনে আগের পর্বে আমরা একে ওভাররাইড করে ফেলছিলাম। যেহেতু একটা মেথডের বডি সম্পর্কে আমরা নিশ্চিৎ না সেহেতু তার বডি লিখে সময় নষ্ট করার দরকার আছে? বেটার আমরা ঐ মেথডটার বডি Unimplemented রেখে দিবো। কোন মেথড আন ইমপ্লিমেন্টেড করতে হলে তার আগে Abstract লিখতে হয়। আর কোন ক্লাসে যদি অন্তত একটা অ্যাবস্ট্রেক্ট মেথড থাকে তাহলে সেই ক্লাসকেও অ্যাবস্ট্রেক্ট করতে হয়। তো আমরা আগের উদাহরনটা এখানে ইমপ্লিমেন্ট করি-
public abstract class Animal {
public abstract void Walk();
public void Call()
{
System.out.println(" Can call");
}
}
public class Human extends Animal {
public void Walk()
{
System.out.println("Human walk using two legs");
}
}
public class MainClass{
public static void main(String[] args) {
Human human1 = new Human();
human1.Walk();
}
}
OUTPUT
Human walk using two legs
কিছু বিষয়-
১। অ্যাবস্ট্র্যাক্ট ক্লাসের কোন অবজেক্ট তৈরী করা যায়না কারন অ্যাবস্ট্র্যাক্ট ক্লাসের আন ইমপ্লিমেন্টেড মেথড থাকে
২। যখন কোন ক্লাসে নির্দিষ্ট একটা মেথড অবশ্যই থাকা উচিৎ বলে মনে করা হয় কিন্তু ভেতরে কি লিখতে হবে তা নিশ্চিৎ শুধু সে ক্ষেত্রেই অ্যাবস্ট্রেক্টেড মেথড ইউজ করা হয়।
৩। অ্যাবস্ট্রেক্ট ক্লাসকে যারা ইনহেরিট করবে তাদেরকে অবশ্যই অ্যাবস্ট্র্যাক্ট মেথড ইমপ্লিমেন্ট করতে হবে। নাহলে কম্পাইলার এরর দিবে। যদি না করা হয় তাহলে ইনহেরিটেড ক্লাসকেও অ্যাবস্ট্রেক্ট করে দিতে হবে। মানে আজ হোক কাল হোক অবজেক্ট তৈরী করতে হলে ইমপ্লিমেন্ট করা লাগবেই :P
৪। অ্যাবস্ট্র্যাক্ট ক্লাসে একই সাথে অ্যাবস্ট্রেক্ট মেথড এবং কনক্রেট মেথড( ইমপ্লিমেন্টেড) থাকতে পারে।
Helpful Post ❤️
ReplyDelete