Constructors (কন্সট্রাক্টর) কি ?
Constructors (কন্সট্রাক্টর) একটা ব্লক কোড যা দেখতে অনেকটা সাধারণ কোডব্লকের মতো তবে এর নামকরণ করা হয় ক্লাসের নামে। যদি ক্লাস এর নাম টেস্ট হয় তবে কন্সট্র্রাক্টর এর নাম হবে টেস্ট। উধারণস্বরূপ Test (){}.কন্সট্র্রাক্টর এর কাজ অবজেক্ট তৈরির পরপরই শুরু হয়ে যায়.যদি আমরা কোনো কন্সট্র্রাক্টর ডিফাইন না করি তাহলে কম্পাইলার কোড নিজে থেকেই একটি খালি কন্সট্র্রাক্টর যোগ করে তারপরে প্রোগ্রাম এর কাজ শুরু করে।কারণ কোনো ক্লাস আমরা যখন কম্পাইলার এর নিকট পাঠায় তখন কম্পাইলার প্রথমে কন্সট্রাক্টর মেথড চেক করে। যদি কনস্ট্রাক্টর মেথড ইউজার দ্বারা বানানো থাকে তখন কম্পাইলার কন্সট্রাক্টর বানানো ছাড়াই কোড রান করার চেষ্টা করে। যদি কনস্ট্রাক্টর মেথড ইউজার দ্বারা বানানো না থাকে তখন কম্পাইলার ডিফাউল্ট ভাবে একটি এম্পটি কন্সট্রাক্টর বানাই এবং তারপরে কোড রান করার চেষ্টা করে যেমন আমরা যদি এভাবে ক্লাস ডিফাইন করি এবং অবজেক্ট তৈরী করি তাহলে কম্পাইলার নিচের মতো করে কোড রান করবে।
এটা হলো আমাদের কোড
class Test {}
Test obj = new Test ();
আর কম্পাইলার রান করবে এরকম
class Test {
// ডিফল্ট কন্সট্রাক্টর যা কম্পাইলার নিজে তৈরী করে রান করেছে। কম্পাইলার তখনই নিজে থেকে কন্সট্রাক্টর তৈরী করবে যখন আমরা কোনো কন্সট্রাক্টর ক্লাসের মধ্যে কল না করি.
Test (){
}
}
Test obj = new Test ();
Constructors (কন্সট্রাক্টর) কেন তৈরী করতে হয় ?
মূলত অবজেক্ট তৈরির সাথে সাথে ডিফল্ট কিছু কার্য সম্পাদনের জন্য Constructors (কন্সট্রাক্টর) তৈরী করা হয়। যেমন কোনো মেসেজ শো করা অথবা ডিফল্ট কিছু ভ্যারিয়েবল এর ভ্যালু সেট করা অথবা ডাটাবেসের কনফিগার সেট করা অথবা অবজেক্ট তৈরির সাথে সাথে ডাটাবেস কানেকশন তৈরী করা ইত্যাদি।
Constructors (কন্সট্রাক্টর) এর প্রকারভেদঃ
১.ডিফল্ট Constructors (কন্সট্রাক্টর) . (যেটা কম্পাইলার নিজেই তৈরী করে ) .
২. নো আর্গুমেন্ট NO ARGUMENT (কন্সট্রাক্টর) . (আমরা ক্লাস এ যদি কোন Constructors কল করি এবং তার যদি কোনো আর্গুমেন্ট না থাকে অর্থাৎ empty পেরামিটার এর ফাঙ্কশন এর মত (কন্সট্রাক্টর) হয় তখন তাকে নো আর্গুমেন্ট Constructors (কন্সট্রাক্টর) বলে.যেমন public TEST (){} .
৩. Parameterized constructor বা প্যারামিটার যুক্ত কনস্ট্রাক্টর। (আমরা ক্লাস এ যদি কোন Constructors কল করি এবং তার যদি কোনো আর্গুমেন্ট থাকে তখন তাকে Parameterized constructor বা প্যারামিটার যুক্ত কনস্ট্রাক্টর বলে। যেমন public TEST (int name ){}.
Constructor (কন্সট্রাক্টর) Chaining কি ?
Constructor (কন্সট্রাক্টর) Chaining কি ?
একটা ক্লাসে একের অধিক Constructor (কন্সট্রাক্টর) থাকতে পারে অথবা আমরা প্যারামিটার এর সংখ্যা ভিন্ন করে অথবা প্যারামিটার এবং নন প্যারামিটার সহ তিনটি Constructor (কন্সট্রাক্টর) বানিয়ে রাখতে পারি। যখন একই ক্লাসের একটি Constructor (কন্সট্রাক্টর) ওই ক্লাসের আরেকটি Constructor (কন্সট্রাক্টর) কল করে তখন তাকে Constructor (কন্সট্রাক্টর) Chaining বলে।
উপরের কোডটি লক্ষ্য করলে আমরা যে ব্যাখ্যা পাই তা হলো
this (“begginerbook .com “); এখানে this এটা এই ক্লাস কে বোঝায় সুতরাং যদি এই ক্লাসের নাম Myclass হয় তবে this (“begginerbook .com “); মানে
Myclass (“begginerbook .com “); অর্থাৎ এটা এই ক্লাসের কন্সট্রাক্টর কল করেছে।
Super() কন্সট্রাক্টর
যখন আমরা কোন ক্লাস কে এক্সটেনডস করে কাজ করি তখন প্যারেন্ট ক্লাসের সকল মেথড ও প্রপার্টি ব্যবহার করতে পারি এটা আগেই জানি। মনে কর Student class কে ব্রিলিয়ান্ট ক্লাস এক্সটেনডস করেছে। ব্রিলিয়ান্ট ক্লাস এ একটা কনস্ট্রাক্টর আছে এবং Student ক্লাস এ একটা একই ধরণের কনস্ট্রাক্টর আছে। যদি ব্রিলিয়ান্ট ক্লাস এ কনস্ট্রাক্টর না থাকতো এবং আমরা কন্সট্রাক্টর কল করতাম তখন প্যারেন্ট ক্লাস বা Student ক্লাস এর কন্সট্রাক্টর কল হতো। আর যদি ব্রিলিয়ান্ট ক্লাস এ কন্সট্রাক্টর কল থাকে তাহলে ব্রিলিয়ান্ট ক্লাস এ কন্সট্রাক্টর কল হবে। যদি এমন হয় প্যারেন্ট এবং চাইল্ড দুই ক্লাস এই কন্সট্রাক্টর কল আছে এমতাবস্থায় আমরা যদি চাইল্ড ক্লাস এর অবজেক্ট তৈরী করি তাহলে ডিফল্ট ভাবে চাইল্ড ক্লাস এর কন্সট্রাক্টর কল হবে কিন্তু আমরা যদি চাই প্যারেন্ট বা বেজ ক্লাসের কন্সট্রাক্টর কল হবে তখন super () কীওয়ার্ড ব্যবহার হবে।
