CodeGym/Java Blog/এলোমেলো/জাভাতে মেথড ওভাররাইডিং
John Squirrels
লেভেল 41
San Francisco

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

এলোমেলো দলে প্রকাশিত
সদস্যগণ
ওহে! আপনি ইতিমধ্যে জাভা পদ্ধতি ব্যবহার করছেন এবং সেগুলি সম্পর্কে অনেক কিছু জানেন। আপনি সম্ভবত এমন পরিস্থিতির মুখোমুখি হয়েছেন যেখানে এক শ্রেণীর একই নামের সাথে অনেকগুলি পদ্ধতি রয়েছে কিন্তু বিভিন্ন পরামিতি রয়েছে। আপনি মনে রাখবেন যে এই ক্ষেত্রে আমরা মেথড ওভারলোডিং ব্যবহার করেছি। আজ আমরা অন্য পরিস্থিতি বিবেচনা করছি। কল্পনা করুন যে আমাদের একটি একক ভাগ করা পদ্ধতি আছে, কিন্তু এটি বিভিন্ন শ্রেণীতে বিভিন্ন জিনিস করতে হবে। আমরা কিভাবে এই আচরণ বাস্তবায়ন করব? বোঝার জন্য, আসুন একটি প্রাণীর অভিভাবক শ্রেণি বিবেচনা করি, যা প্রাণীদের প্রতিনিধিত্ব করে এবং আমরা এতে একটি কথা বলার পদ্ধতি তৈরি করব:
public class Animal {

   public void speak() {

       System.out.println("Hello!");
   }
}
যদিও আমরা সবেমাত্র প্রোগ্রামটি লেখা শুরু করেছি, আপনি সম্ভবত একটি সম্ভাব্য সমস্যা দেখতে পাচ্ছেন: পৃথিবীতে অনেক প্রাণী রয়েছে এবং তারা সবাই ভিন্নভাবে 'কথা বলে': বিড়াল মিউ, হাঁস কুয়াক, এবং সাপ হিস করে। পদ্ধতি ওভাররাইডিং কিভাবে কাজ করে - 2আমাদের লক্ষ্য সহজ: কথা বলার পদ্ধতির লোড তৈরি করা এড়িয়ে চলুন। মেওয়াইং এর জন্য একটি catSpeak() পদ্ধতি, হিসিং এর জন্য একটি snakeSpeak() পদ্ধতি তৈরি করার পরিবর্তে , আমরা স্পিক() কে কল করতে চাইপদ্ধতি এবং সাপ হিস, বিড়াল মিও, এবং কুকুর ছাল আছে. আমরা পদ্ধতি ওভাররাইডিং ব্যবহার করে সহজেই এটি অর্জন করতে পারি। উইকিপিডিয়া 'ওভাররাইডিং' শব্দটির নিম্নলিখিত ব্যাখ্যা দেয়: মেথড ওভাররাইডিং, অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং, একটি ভাষা বৈশিষ্ট্য যা একটি সাবক্লাস বা চাইল্ড ক্লাসকে একটি পদ্ধতির একটি নির্দিষ্ট বাস্তবায়ন প্রদান করতে দেয় যা ইতিমধ্যেই এর একটি সুপারক্লাস বা দ্বারা সরবরাহ করা হয়েছে। অভিভাবক ক্লাস এটি মূলত সঠিক। মেথড ওভাররাইডিং আপনাকে প্যারেন্ট ক্লাসের কিছু পদ্ধতি নিতে এবং প্রতিটি শিশু ক্লাসে আপনার নিজস্ব বাস্তবায়ন লিখতে দেয়। নতুন বাস্তবায়ন শিশু শ্রেণিতে পিতামাতার বাস্তবায়নকে 'প্রতিস্থাপন' করে। একটি উদাহরণে এটি দেখতে কেমন তা দেখা যাক। 4টি ক্লাস তৈরি করুন যা আমাদের পশু শ্রেণীর উত্তরাধিকারী:
public class Bear extends Animal {
   @Override
   public void speak() {
       System.out.println("Growl!");
   }
}
public class Cat extends Animal {

   @Override
   public void speak() {
       System.out.println("Meow!");
   }
}

public class Dog extends Animal {

   @Override
   public void speak() {
       System.out.println("Woof!");
   }
}


public class Snake extends Animal {

   @Override
   public void speak() {
       System.out.println("Hiss!");
   }
}
"এখানে ভবিষ্যতের জন্য একটি ছোট লাইফহ্যাক রয়েছে: পিতামাতার ক্লাসের পদ্ধতিগুলিকে ওভাররাইড করতে, IntelliJ IDE-তে চাইল্ড ক্লাসের কোডে যান, Ctrl+O ক্লিক করুন এবং মেনুতে "ওভাররাইড পদ্ধতি..." বেছে নিন। হট কী ব্যবহারে অভ্যস্ত হন শুরু থেকে — এটি আপনাকে দ্রুত প্রোগ্রাম লিখতে সাহায্য করবে! আমাদের প্রয়োজনীয় আচরণ নির্দিষ্ট করার জন্য, আমরা কয়েকটি জিনিস করেছি:
  1. প্রতিটি শিশু শ্রেণিতে, আমরা অভিভাবক শ্রেণীর পদ্ধতির মতো একই নামের একটি পদ্ধতি তৈরি করেছি।

  2. আমরা কম্পাইলারকে বলেছিলাম যে প্যারেন্ট ক্লাসের মতো পদ্ধতির নামকরণ করা ঘটনা ছিল না: আমরা এর আচরণকে ওভাররাইড করতে চাই। কম্পাইলারের সাথে এটি যোগাযোগ করতে, আমরা পদ্ধতির উপরে @Override টীকা সেট করি।
    একটি পদ্ধতির উপরে রাখা হলে, @Override টীকাটি কম্পাইলারকে জানায় (পাশাপাশি প্রোগ্রামাররা আপনার কোড পড়ছে): 'সবকিছু ঠিক আছে। এটি একটি ভুল নয়. আমি ভুলে যাচ্ছি না। আমি সচেতন যে এই ধরনের একটি পদ্ধতি ইতিমধ্যেই বিদ্যমান এবং আমি এটি ওভাররাইড করতে চাই'।

  3. আমরা প্রতিটি শিশু শ্রেণীর জন্য প্রয়োজনীয় বাস্তবায়ন লিখেছি। যখন স্পিক() পদ্ধতিটি বলা হয়, তখন একটি সাপ হিস হিস করা উচিত, একটি ভালুক গর্জন করা উচিত ইত্যাদি।
চলুন দেখি এটি একটি প্রোগ্রামে কিভাবে কাজ করে:
public class Main {

   public static void main(String[] args) {

       Animal animal1 = new Dog();
       Animal animal2 = new Cat();
       Animal animal3 = new Bear();
       Animal animal4 = new Snake();

       animal1.speak();
       animal2.speak();
       animal3.speak();
       animal4.speak();
   }
}
কনসোল আউটপুট:
Woof!
Meow!
Growl!
Hiss!
চমৎকার! সবকিছু যেমন উচিত কাজ করে! আমরা 4টি রেফারেন্স ভেরিয়েবল তৈরি করেছি যা প্রাণীর অভিভাবক শ্রেণীর বস্তু সংরক্ষণ করে এবং আমরা তাদের জন্য 4টি ভিন্ন চাইল্ড ক্লাসের উদাহরণ বরাদ্দ করেছি। ফলস্বরূপ, প্রতিটি বস্তু তার নিজস্ব আচরণ প্রদর্শন করে। প্রতিটি চাইল্ড ক্লাসের জন্য, ওভাররাইড করা স্পিক() মেথড অ্যানিমাল ক্লাসে 'নেটিভ' স্পিক() মেথডকে প্রতিস্থাপিত করেছে (যা কেবল 'হ্যালো!' প্রদর্শন করে)। ওভাররাইডিংয়ের বিভিন্ন সীমাবদ্ধতা রয়েছে: পদ্ধতি ওভাররাইডিং কিভাবে কাজ করে - 3
  1. ওভাররাইড করা পদ্ধতিতে প্যারেন্ট পদ্ধতির মতো একই প্যারামিটার থাকতে হবে।

    যদি অভিভাবক শ্রেণীর স্পিক পদ্ধতিতে একটি স্ট্রিং প্যারামিটার থাকে, তাহলে চাইল্ড ক্লাসে ওভাররাইড করা পদ্ধতিতেও একটি স্ট্রিং প্যারামিটার থাকতে হবে। অন্যথায়, কম্পাইলার একটি ত্রুটি তৈরি করবে:

    public class Animal {
    
       public void speak(String s) {
    
           System.out.println("Hello! " + s);
       }
    }
    
    public class Cat extends Animal {
    
       @Override // Error!
       public void speak() {
           System.out.println("Meow!");
       }
    }

  2. ওভাররাইড করা পদ্ধতিতে অভিভাবক পদ্ধতির মতো একই রিটার্ন টাইপ থাকতে হবে।

    অন্যথায়, আমরা একটি কম্পাইলার ত্রুটি পাব:

    public class Animal {
    
       public void speak() {
    
           System.out.println("Hello!");
       }
    }
    
    
    public class Cat extends Animal {
    
       @Override
       public String speak() {         // Error!
           System.out.println("Meow!");
           return "Meow!";
       }
    }

  3. ওভাররাইড করা পদ্ধতিতে অ্যাক্সেস মডিফায়ারটিও 'অরিজিনাল' পদ্ধতির মতোই হতে হবে:

    public class Animal {
    
          public void speak() {
    
                System.out.println("Hello!");
          }
    }
    
    public class Cat extends Animal {
    
           @Override
           private void speak() {      // Error!
               System.out.println("Meow!");
           }
    }
জাভাতে মেথড ওভাররাইডিং হল পলিমরফিজম (OOP এর নীতি যা আমরা শেষ পাঠে বর্ণনা করেছি) বাস্তবায়নের একটি উপায়। এর মানে হল যে এর প্রধান সুবিধা হল একই নমনীয়তা যা আমরা আগে আলোচনা করেছি। আমরা ক্লাসের একটি সহজ এবং যৌক্তিক সিস্টেম তৈরি করতে পারি, যার প্রত্যেকটির একটি নির্দিষ্ট আচরণ রয়েছে (কুকুরের ছাল, বিড়াল মিউ), একটি সাধারণ ইন্টারফেস সহ — অনেক পদ্ধতির পরিবর্তে তাদের জন্য একটি একক স্পিক() পদ্ধতি, যেমন dogSpeak () , speakCat () , ইত্যাদি
মন্তব্য
  • জনপ্রিয়
  • নতুন
  • পুরানো
মন্তব্য লেখার জন্য তোমাকে অবশ্যই সাইন ইন করতে হবে
এই পাতায় এখনও কোনো মন্তব্য নেই