জাভা মেথড ওভাররাইডিং(Java Method Overriding)

Usage of Java Method Overriding

  • Method overriding is used to provide specific implementation of a method that is already provided by its super class.
  • Method overriding is used for runtime polymorphism

Rules for Java Method Overriding

  1. method must have same name as in the parent class
  2. method must have same parameter as in the parent class.
  3. must be IS-A relationship (inheritance).

Understanding the problem without method overriding

Let’s understand the problem that we may face in the program if we don’t use method overriding.

যদিও সাব-ক্লাস সুপার-ক্লাসের সব গুলো প্রোপ্রার্টি এবং মেথড ইনহেরিটর করে, তবে সাব-ক্লাসে সুপার ক্লাসের যে কোন প্রোপ্রার্টি বা মেথড কে অভাররাইড করা যায়।

একটি উদাহরণ দেখা যাক-

      public class Circle {
          double radius;
          String color;

          public Circle(double radius, String color) {
              this.radius = radius;
              this.color = color;
          }

          public Circle() {
              radius = 1.0;
              color = "RED";
          }

          public double getArea() {
              return radius * radius * Math.PI;
          }
      }

এই ক্লাসটিতে getArea() মেথড একটি বৃত্তের ক্ষেত্রফল রিটার্ন করে।

এখন আমরা এই ক্লাসটিকে এক্সটেন্ড(‌‌‌‌‌extends‌) করে নতুন আরেকটি ক্লাস লিখবো-

    public class Cylinder extends Circle {
        double height;

        public Cylinder() {
            this.height = 1.0;
        }

        public Cylinder(double radius, String color, double height) {
            super(radius, color);
            this.height = height;
        }

      @Override    
        public double getArea() {
            return 2 * Math.PI * radius * height + 2 * super.getArea();
        }
    }

এই ক্লাসটিতে Circle এর মেথডটি আমরা সাধারণ ভাবেই পেয়ে যাবো। Cylinder এর ক্ষেত্রফল নির্ধারণ করতে হলে getArea() কল করলেই হয়ে যাচ্ছে। কিন্তু আমরা জানি যে Circle এবং Cylinder এর ক্ষেত্রফল একভাবে নির্ধারণ করা যায় না। এক্ষেত্রে আমরা যদি Circle এর মেথডটি কে ব্যবহার করি তাহলে আমাদের ক্ষেত্রফলের মান ভুল আসবে। এই সমস্যা সমধাণ করার জন্যে আমরা আমাদের Cylinder ক্লাসটিতে getArea()মেথডটিকে পুনারায় লিখেছি।

এখানে লক্ষ্য রাখতে হবে যে, দুটি মেথড এর সিগনেচার, রিটার্ন-টাইপ এবং প্যারামিটার লিস্ট একই রকম হতে হবে।

এখন আমরা যদি Cylinder ক্লাস-এর getArea() মেথড কল করি, তাহলে অভারাইডেড মেথডটি কল হবে।

অ্যনোটেশান(Annotation) @Override

@Override এই অ্যনোটেশানটি জাভা 1.5 ভার্সনে প্রথম নিয়ে আসা হয়। কোন মেথডকে যদি আমরা অভাররাইড করি তাহলে সেই মেথড এর উপরে @Override দেয়া হয়। এটি কম্পাইলারকে ইনফর্ম করে যে, এই মেথটি সুপার ক্লাসের অভাররাইডেড মেথড।

তবে এটি অপশনাল হলেও অবশ্যই ভাল যদি ব্যবহার করা হয়।

Real example of Java Method Overriding

Consider a scenario, Bank is a class that provides functionality to get rate of interest. But, rate of interest varies according to banks. For example, SBI, ICICI and AXIS banks could provide 8%, 7% and 9% rate of interest.

Java method overriding example of bank

  1. class Bank{
  2. int getRateOfInterest(){return 0;}
  3. }
  4. class SBI extends Bank{
  5. int getRateOfInterest(){return 8;}
  6. }
  7. class ICICI extends Bank{
  8. int getRateOfInterest(){return 7;}
  9. }
  10. class AXIS extends Bank{
  11. int getRateOfInterest(){return 9;}
  12. }
  13. class Test2{
  14. public static void main(String args[]){
  15. SBI s=new SBI();
  16. ICICI i=new ICICI();
  17. AXIS a=new AXIS();
  18. System.out.println(“SBI Rate of Interest: “+s.getRateOfInterest());
  19. System.out.println(“ICICI Rate of Interest: “+i.getRateOfInterest());
  20. System.out.println(“AXIS Rate of Interest: “+a.getRateOfInterest());
  21. }
  22. }

Test it Now

Output:
SBI Rate of Interest: 8
ICICI Rate of Interest: 7
AXIS Rate of Interest: 9

Can we override static method?

No, static method cannot be overridden. It can be proved by runtime polymorphism, so we will learn it later.


Why we cannot override static method?

because static method is bound with class whereas instance method is bound with object. Static belongs to class area and instance belongs to heap area.


Can we override java main method?

No, because main is a static method.


Difference between method Overloading and Method Overriding in java

Click me for difference between method overloading and overriding


Advertisements