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

জাভাতে মেথড ওভাররাইডিং-এ মেথড সিগনেচার পরিবর্তন করা যায় কি?

না, জাভাতে মেথড ওভাররাইড করার সময় সুপারক্লাস এবং সাবক্লাসের মেথড দুটির নাম, প্যারামিটার লিস্ট এবং রিটার্ন টাইপ একই থাকতে হবে। যদি সিগনেচার পরিবর্তন করা হয়, তবে সেটি ওভাররাইডিং ন होकर মেথড ওভারলোডিং হয়ে যায়।

উদাহরণ

নিচের প্রোগ্রামে সাবক্লাসে sample(int a, float b) সিগনেচার ব্যবহার করা হয়েছে, যেখানে সুপারক্লাসে sample(int a, int b) ছিল। ফলে এটি ওভাররাইডিং না হয়ে ওভারলোডিং হয়ে গেছে।

class Super {
    void sample(int a, int b) {
        System.out.println("Method of the Super class");
    }
}

public class MethodOverriding extends Super {
    void sample(int a, float b) { // সিগনেচার পরিবর্তন হয়েছে
        System.out.println("Method of the Sub class");
    }

    public static void main(String args[]) {
        MethodOverriding obj = new MethodOverriding();
        obj.sample(20, 20); // 20 হলো int, তাই সুপারক্লাসের মেথড কল হবে
    }
}

আউটপুট

Method of the Super class

ব্যাখ্যা: যেহেতু সিগনেচার ভিন্ন, জাভা কম্পাইলার এগুলো দুটি আলাদা মেথড হিসেবে বিবেচনা করে। obj.sample(20, 20) কল করার সময় আর্গুমেন্ট দুটি int, তাই সুপারক্লাসের sample(int, int) মেথডটি কল হয়। সাবক্লাসের মেথডটি কল করতে হলে obj.sample(20, 20.0f) লিখতে হতো।

ওভাররাইডিং-এর কঠোর নিয়মাবলী

  • একই মেথড নাম
  • একই প্যারামিটার লিস্ট (ক্রম, টাইপ এবং সংখ্যা)
  • কমপ্যাটিবল রিটার্ন টাইপ (কোভারিয়েন্ট রিটার্ন টাইপ অনুমোদিত)
  • অ্যাক্সেস মডিফায়ার অধিক রിസ্ট্রিক্টিভ হতে পারে না (যেমন: protected → public করা যায়, public → private করা যায় না)
  • চেকড এক্সেপশন সুপারক্লাসের চেয়ে ব্রোডার হতে পারে না
  1. জাভাতে Enum কি কোনো ক্লাস এক্সটেন্ড করতে পারে?

  2. জাভাতে মেথড ওভারলোডিং বনাম মেথড ওভাররাইডিং

  3. জাভা মেথড ওভাররাইডিংয়ের নিয়মাবলি

  4. জাভাতে মেথড ওভাররাইডিং