কম্পিউটার টিউটোরিয়াল

জাভায় super() এবং this() এর পার্থক্য


জাভা বিভিন্ন কিওয়ার্ডের পাশাপাশি 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}
  1. জাভাতে ইনহেরিটেন্স এবং কম্পোজিশনের পার্থক্য

  2. জাভাতে Thread এবং Runnable-এর পার্থক্য

  3. জাভাতে Exception এবং Error-এর পার্থক্য

  4. জাভাতে Serialization এবং Externalization-এর পার্থক্য