একটি কনস্ট্রাক্টর হলো একটি নির্দিষ্ট ক্লাসের নন-স্ট্যাটিক মেম্বারগুলোকো একটি অবজেক্টের সাপেক্ষে ইনিশিয়ালাইজ করার জন্য।
ইন্টারফেসে কনস্ট্রাক্টর
- জাভাতে একটি Interface-এ কনস্ট্রাক্টর নেই কারণ ইন্টারফেসের সকল ডেটা মেম্বার ডিফল্টরূপে public static final, অর্থাৎ কনস্ট্যান্ট (ডিক্লেয়ারেশনের সময় ভ্যালু অ্যাসাইন করা হয়)।
- ইন্টারফেসে কোনো ডেটা মেম্বার নেই যেগুলো কনস্ট্রাক্টর দিয়ে ইনিশিয়ালাইজ করা যাবে।
- একটি মেথড কল করতে হলে অবজেক্ট প্রয়োজন, যেহেতু ইন্টারফেসের মেথডগুলোর বডি নেই, ইন্টারফেসে মেথড কল করার প্রয়োজন নেই।
- যেহেতু আমরা ইন্টারফেসের মেথড কল করতে পারি না, ইন্টারফেসের জন্য অবজেক্ট তৈরি করার প্রয়োজন নেই এবং তাই কনস্ট্রাক্টর থাকার প্রয়োজন নেই।
উদাহরণ ১
interface Addition {
int add(int i, int j);
}
public class Test implements Addition {
public int add(int i, int j) {
int k = i+j;
return k;
}
public static void main(String args[]) {
Test t = new Test();
System.out.println("k value is:" + t.add(10,20));
}
}
আউটপুট
k value is:30
ক্লাসে কনস্ট্রাক্টর
- একটি ক্লাস-এ কনস্ট্রাক্টর-র উদ্দেশ্য হলো ফিল্ডগুলো ইনিশিয়ালাইজ করা কিন্তু অবজেক্ট বিল্ড করা নয়।
- যখন আমরা একটি অ্যাবস্ট্রাক্ট সুপারক্লাসের নতুন ইনস্ট্যান্স তৈরি করার চেষ্টা করি, কম্পাইলার এরর দেবে।
- তবে, আমরা একটি অ্যাবস্ট্রাক্ট ক্লাস ইনহেরিট করে এর কনস্ট্রাক্টর ব্যবহার করতে পারি এর ভেরিয়েবল সেট করে।
উদাহরণ ২
abstract class Employee {
public String empName;
abstract double calcSalary();
Employee(String name) {
this.empName = name; // Constructor of abstract class
}
}
class Manager extends Employee {
Manager(String name) {
super(name); // সাবক্লাসের কনস্ট্রাক্টরে নাম সেট করা
}
double calcSalary() {
return 50000;
}
}
public class Test {
public static void main(String args[]) {
Employee e = new Manager("Adithya");
System.out.println("Manager Name is:" + e.empName);
System.out.println("Salary is:" + e.calcSalary());
}
}
আউটপুট
Manager Name is:Adithya Salary is:50000.0