JavaRush /جاوا بلاگ /Random-UR /جاوا میں طریقہ اوور رائیڈنگ میکانزم یا اوور رائیڈ

جاوا میں طریقہ اوور رائیڈنگ میکانزم یا اوور رائیڈ

گروپ میں شائع ہوا۔
ہیلو! آپ جاوا میں پہلے ہی طریقے استعمال کرتے ہیں اور ان کے بارے میں بہت کچھ جانتے ہیں۔ آپ کو شاید ایسی صورتحال کا سامنا کرنا پڑا ہے جہاں ایک کلاس میں ایک ہی نام کے ساتھ بہت سے طریقے تھے لیکن مختلف دلائل۔ اگر آپ کو یاد ہے تو، ان صورتوں میں ہم نے طریقہ اوور لوڈنگ میکانزم کا استعمال کیا۔ آج ایک مختلف صورت حال پر نظر ڈالتے ہیں۔ تصور کریں کہ ہمارے پاس ایک عام طریقہ ہے، لیکن اسے مختلف چیزیں کرنے چاہئیں اس پر منحصر ہے کہ اسے کس کلاس میں بلایا گیا تھا۔ اس طرز عمل کو کیسے نافذ کیا جائے؟ اس کا پتہ لگانے کے لیے، آئیے ایک پیرنٹ کلاس لیتے ہیں Animalجس میں جانوروں کی نشاندہی ہوتی ہے اور اس میں ایک طریقہ بنائیں voice- " آواز ":
public class Animal {

   public void voice() {

       System.out.println("Voice!");
   }
}
اگرچہ ہم نے ابھی پروگرام لکھنا شروع کیا ہے، آپ غالباً ممکنہ مسئلہ کو دیکھ سکتے ہیں: دنیا میں بہت سارے جانور ہیں، اور وہ سب مختلف طریقے سے "بولتے ہیں": بلیوں میانو، بطخیں قہقہے، سانپ ہستے ہیں۔ طریقہ اوور رائیڈنگ میکانزم کیسے کام کرتا ہے - 2 ہمارا مقصد آسان ہے: ووٹ ڈالنے کے طریقوں کا ایک گروپ بنانے سے گریز کریں۔ voiceCat()میان کرنے، ہسنے وغیرہ کے طریقے بنانے کے بجائے voiceSnake()، ہم چاہتے ہیں کہ voice()سانپ سسکارے، بلی میانو کرے، اور کتا بھونکنے کے لیے جب طریقہ کہا جائے تو۔ ہم اسے آسانی سے حاصل کر سکتے ہیں طریقہ اوور رائیڈنگ میکانزم (Override in Java) ۔ ویکیپیڈیا "اوور رائیڈنگ" کی اصطلاح کی مندرجہ ذیل وضاحت کرتا ہے: آبجیکٹ میں میتھڈ اوور رائیڈنگ - اورینٹڈ پروگرامنگ ایک پروگرامنگ لینگویج کی خصوصیات میں سے ایک ہے جو ذیلی طبقے یا چائلڈ کلاس کو سپر کلاسز میں سے کسی ایک میں پہلے سے نافذ کردہ طریقہ کار کا مخصوص نفاذ فراہم کرنے کی اجازت دیتی ہے۔ یا والدین کی کلاسز۔ یہ، عام طور پر، درست ہے. اوور رائیڈنگ آپ کو پیرنٹ کلاس کا طریقہ اختیار کرنے اور ہر نسلی طبقے میں اس طریقہ کار کے اپنے نفاذ کو لکھنے کی اجازت دیتا ہے۔ نیا نفاذ چائلڈ کلاس میں والدین کو "تبدیل" کرے گا۔ آئیے دیکھتے ہیں کہ یہ ایک مثال کے ساتھ کیسا لگتا ہے۔ آئیے اپنی کلاس کے لیے 4 جانشین کلاسز بنائیں : Animal
public class Bear extends Animal {
   @Override
   public void voice() {
       System.out.println("Р-р-р!");
   }
}
public class Cat extends Animal {

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

public class Dog extends Animal {

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


public class Snake extends Animal {

   @Override
   public void voice() {
       System.out.println("Ш-ш-ш!");
   }
}
مستقبل کے لیے ایک چھوٹا سا لائف ہیک: پیرنٹ کلاس کے طریقوں کو اوور رائیڈ کرنے کے لیے، Intellij IDE a میں ڈیسنڈنٹ کلاس کے کوڈ پر جائیں، Ctrl+O دبائیں اور مینو سے " اوور رائڈ طریقے... " کو منتخب کریں۔ شروع سے ہی ہاٹکیز استعمال کرنے کی عادت ڈالیں، اس سے پروگرام لکھنے میں تیزی آئے گی! جو رویہ ہم چاہتے تھے اسے ترتیب دینے کے لیے، ہم نے کچھ چیزیں کیں:
  1. ہم نے ہر نسلی طبقے میں ایک طریقہ بنایا ہے جس کا نام پیرنٹ کلاس میں ہے۔
  2. ہم نے مرتب کرنے والے کو بتایا کہ ہم نے طریقہ کار کا نام ایک وجہ سے پیرنٹ کلاس میں رکھا ہے: ہم اس کے رویے کو اوور رائیڈ کرنا چاہتے ہیں۔ مرتب کرنے والے کو اس "پیغام" کے لیے، ہم طریقہ پر @Override تشریح ڈالتے ہیں ۔
    ایک طریقہ کے اوپر رکھی گئی @Override تشریح کمپائلر کو بتاتی ہے (اور پروگرامرز آپ کا کوڈ بھی پڑھ رہے ہیں): "سب کچھ ٹھیک ہے، یہ کوئی غلطی یا میری بھول نہیں ہے۔ مجھے یاد ہے کہ ایسا طریقہ پہلے سے موجود ہے، اور میں اسے اوور رائڈ کرنا چاہتا ہوں۔"

  3. ہم نے وہ نفاذ لکھا جس کی ہمیں ہر نسلی طبقے کے لیے ضرورت تھی۔ جب بلایا جائے تو سانپ voice()سسکارے، ریچھ گرجائے، وغیرہ۔
آئیے دیکھتے ہیں کہ یہ پروگرام میں کیسے کام کرے گا:
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.voice();
       animal2.voice();
       animal3.voice();
       animal4.voice();
   }
}
کنسول آؤٹ پٹ: Woof! میانو! رررر! شش! بہت اچھا، سب کچھ کام کرتا ہے جیسا کہ ہونا چاہئے! ہم نے پیرنٹ کلاس کے 4 حوالہ متغیرات بنائے Animal، اور انہیں نسلی کلاسوں کے 4 مختلف اشیاء کو تفویض کیا۔ نتیجے کے طور پر، ہر چیز مختلف طریقے سے برتاؤ کرتی ہے. نسلی طبقوں میں سے ہر ایک کے لیے، اوور رائیڈڈ طریقہ نے کلاس سے voice()"آبائی" طریقہ کو تبدیل کر دیا (جو صرف "آواز!" کو کنسول میں آؤٹ پٹ کرتا ہے)۔ اوور رائیڈنگ کی متعدد حدود ہیں: voice()Animalطریقہ اوور رائیڈنگ میکانزم کیسے کام کرتا ہے - 3
  1. اوور رائیڈ شدہ طریقہ میں وہی دلیلیں ہونی چاہئیں جو پیرنٹ طریقہ کے ہیں۔

    voiceاگر پیرنٹ کلاس میں کوئی طریقہ input کے طور پر قبول کرتا ہے String، تو چائلڈ کلاس میں اوور رائیڈڈ طریقہ کو بھی input کے طور پر قبول کرنا چاہیے String، بصورت دیگر کمپائلر ایک غلطی پھینک دے گا:

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

  2. اوور رائیڈ شدہ طریقہ میں واپسی کی وہی قسم ہونی چاہیے جو کہ پیرنٹ طریقہ ہے۔

    بصورت دیگر، ہمیں ایک تالیف کی غلطی موصول ہوگی:

    public class Animal {
    
       public void voice() {
    
           System.out.println("Voice!");
       }
    }
    
    
    public class Cat extends Animal {
    
       @Override
       public String voice() {         //error!
           System.out.println("Meow!");
           return "Meow!";
       }
    }

  3. ایک اوور رائیڈڈ طریقہ کا رسائی موڈیفائر بھی "اصل" سے مختلف نہیں ہو سکتا:

    public class Animal {
    
       public void voice() {
    
           System.out.println("Voice!");
       }
    }
    
    public class Cat extends Animal {
    
       @Override
       private void voice() {      //error!
           System.out.println("Meow!");
       }
    }
جاوا میں میتھڈ اوور رائیڈنگ پولیمورفزم (OOP کا اصول، جس کے بارے میں ہم نے پچھلے لیکچر میں بات کی تھی) کو نافذ کرنے کا ایک ٹول ہے۔ لہذا، اس کے استعمال کا بنیادی فائدہ وہی لچک ہوگا جس کے بارے میں ہم نے پہلے بات کی تھی۔ ہم کلاسوں کا ایک سادہ اور منطقی نظام بنا سکتے ہیں، جن میں سے ہر ایک کا مخصوص رویہ ہوگا (کتے کی بھونک، بلیوں کا میاؤ)، لیکن ایک ہی انٹرفیس کے ساتھ - voice()طریقوں کے ایک گروپ کے بجائے سب کے لیے ایک طریقہ voiceDog()، voiceCat()وغیرہ۔
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION