জাভা বিভিন্ন কিওয়ার্ডের পাশাপাশি this এবং super নামে দুটি বিশেষ কিওয়ার্ড প্রদান করে যা মূলত একটি ক্লাসের বর্তমান ইনস্ট্যান্স এবং তার সুপার ক্লাসকে প্রতিনিধিত্ব করতে ব্যবহৃত হয়। এই সাদৃশ্যের পাশাপাশি এই দুটি কিওয়ার্ডের মধ্যে উল্লেখযোগ্য পার্থক্য রয়েছে যা নিচে তালিকাভুক্ত করা হলো:
| ক্রমিক নং | বিষয় | this | super |
|---|---|---|---|
| ১ | প্রতিনিধিত্ব ও রেফারেন্স | this কিওয়ার্ডটি মূলত একটি ক্লাসের বর্তমান ইনস্ট্যান্সকে প্রতিনিধিত্ব করে। |
অন্যদিকে super কিওয়ার্ডটি পেরেন্ট ক্লাসের বর্তমান ইনস্ট্যান্সকে প্রতিনিধিত্ব করে। |
| ২ | ক্লাস কনস্ট্রাক্টরের সাথে ইন্টারঅ্যাকশন | this কিওয়ার্ডটি একই ক্লাসের ডিফল্ট কনস্ট্রাক্টর কল করতে ব্যবহৃত হয়। |
super কিওয়ার্ডটি পেরেন্ট ক্লাসের ডিফল্ট কনস্ট্রাক্টর কল করতে ব্যবহৃত হয়। |
| ৩ | মেথড অ্যাক্সেসিবিলিটি | this কিওয়ার্ডটি বর্তমান ক্লাসের মেথডগুলো অ্যাক্সেস করতে ব্যবহৃত হয় কারণ এর রেফারেন্স বর্তমান ক্লাসের। |
super কিওয়ার্ডের সাহায্যে পেরেন্ট ক্লাসের মেথড অ্যাক্সেস করা যায়। |
| ৪ | স্ট্যাটিক কনটেক্সট | this কিওয়ার্ডটি স্ট্যাটিক কনটেক্সট থেকে রেফার করা যায় অর্থাৎ স্ট্যাটিক ইনস্ট্যান্স থেকে আহ্বান করা যায়। উদাহরণস্বরূপ, System.out.println(this.x) লিখলে কম্পাইলেশন বা রানটাইম এরর ছাড়া x-এর মান প্রিন্ট হবে। |
অন্যদিকে super কিওয়ার্ডটি স্ট্যাটিক কনটেক্সট থেকে রেফার করা যায়না অর্থাৎ স্ট্যাটিক ইনস্ট্যান্স থেকে আহ্বান করা যায়না। উদাহরণস্বরূপ, System.out.println(super.x) লিখলে কম্পাইল টাইম এরর হবে। |
this vs. super উদাহরণ
Example.java
class A {
public int x, y;
public A(int x, int y) {
this.x = x;
this.y = y;
}
}
class B extends A {
public int x, y;
public B() {
this(0, 0);
}
public B(int x, int y) {
super(x + 1, y + 1); // পেরেন্ট ক্লাস কনস্ট্রাক্টর কল
this.x = x;
this.y = y;
}
public void print() {
System.out.println("Base class : {" + x + ", " + y + "}");
System.out.println("Super class : {" + super.x + ", " + super.y + "}");
}
}
class Point {
public static void main(String[] args) {
B obj = new B();
obj.print();
obj = new B(1, 2);
obj.print();
}
}
আউটপুট
Base class : {0, 0}
Super class : {1, 1}
Base class : {1, 2}
Super class : {2, 3}