JavaRush /جاوا بلاگ /Random-SD /جاوا ۾ اوور رائيڊنگ ميڪانيزم يا اوور رائڊ جو طريقو

جاوا ۾ اوور رائيڊنگ ميڪانيزم يا اوور رائڊ جو طريقو

گروپ ۾ شايع ٿيل
سلام! توھان اڳ ۾ ئي جاوا ۾ طريقا استعمال ڪندا آھيو ۽ انھن بابت گھڻو ڄاڻو ٿا. توهان شايد اهڙي صورتحال سان منهن ڪيو آهي جتي هڪ طبقي ۾ ڪيترائي طريقا ساڳيا نالا هئا پر مختلف دليلن سان. جيڪڏهن توهان کي ياد آهي، انهن حالتن ۾ اسان استعمال ڪيو طريقو اوورلوڊنگ ميڪانيزم. اڄ اچو ته هڪ مختلف صورتحال تي نظر وجهون. تصور ڪريو ته اسان وٽ ھڪڙو عام طريقو آھي، پر اھو مختلف شيون ڪرڻ گھرجي ان تي منحصر آھي جنھن طبقي کي سڏيو ويو آھي. هن رويي کي ڪيئن لاڳو ڪرڻ؟ ان کي سمجهڻ لاءِ اچو ته هڪ پيرن ڪلاس وٺون جنهن ۾ Animalجانورن کي ظاهر ڪيو وڃي ۽ ان ۾ هڪ طريقو ٺاهيو voice- “ آواز ”:
public class Animal {

   public void voice() {

       System.out.println("Voice!");
   }
}
جيتوڻيڪ اسان پروگرام لکڻ شروع ڪيو آهي، توهان گهڻو ڪري امڪاني مسئلو ڏسي سگهو ٿا: دنيا ۾ ڪيترائي جانور آهن، ۽ اهي سڀ ”ڳالهائي“ مختلف انداز ۾: ٻليون ميون، بتھ ڪوئڪ، سانپ هيس. ڪئين طريقي سان اوور رائڊنگ ميڪانيزم ڪم ڪري ٿو - 2 اسان جو مقصد سادو آهي: ووٽ ڪاسٽ ڪرڻ لاءِ ڪيترائي طريقا ٺاهڻ کان پاسو ڪريو. voiceCat()ميون وڄائڻ، هُسڻ وغيره لاءِ طريقا ٺاهڻ بدران voiceSnake()، اسان چاهيون ٿا ته voice()نانگ کي هُس، ٻلي ميون ۽ ڪتي ڀونڪجي جڏهن طريقو چئجي. اسان آساني سان حاصل ڪري سگھون ٿا طريقي سان استعمال ڪندي اوور رائڊ ميڪانيزم (جاوا ۾ اوور رائڊ) . وڪيپيڊيا اصطلاح ”اوور رائيڊنگ“ جي ھيٺين وضاحت ڏئي ٿو: Method overriding in object - oriented programming هڪ پروگرامنگ ٻوليءَ جي خاصيتن مان هڪ آهي جيڪا هڪ ذيلي ڪلاس يا چائلڊ ڪلاس کي اجازت ڏئي ٿي ته جيئن اڳ ۾ ئي ڪنهن هڪ سپر ڪلاس ۾ لاڳو ڪيل طريقي جو مخصوص نفاذ مهيا ڪري سگهي. يا والدين طبقن. اهو، عام طور تي، صحيح آهي. Overriding توهان کي اجازت ڏئي ٿو ته هڪ والدين طبقي جو طريقو وٺو ۽ هر نسلي طبقي ۾ هن طريقي جي پنهنجي عمل کي لکو. نئون نفاذ ٻار جي ڪلاس ۾ والدين کي ”متبادل“ ڪندو. اچو ته ڏسو ته اهو ڇا ٿو لڳي مثال سان. اچو ته اسان جي ڪلاس لاءِ 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 کي دٻايو ۽ مينيو مان ” اوور رائڊ طريقن... “ کي چونڊيو. شروع کان hotkeys استعمال ڪرڻ جي عادت حاصل ڪريو، اهو پروگرام لکڻ جي رفتار کي تيز ڪندو! اهو رويو قائم ڪرڻ لاءِ جيڪو اسان چاهيون ٿا، اسان ڪجھ ڪم ڪيو:
  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();
   }
}
ڪنسول آئوٽ: ووف! ميوو! ررر! شش! عظيم، هر شيء ڪم ڪري ٿو جيئن اهو گهرجي! اسان 4 حوالا متغير پيدا ڪيا آھن والدين طبقي جا Animal، ۽ انھن کي تفويض ڪيو 4 مختلف شين جي نسلي طبقي جي. نتيجي طور، هر شئي مختلف طريقي سان عمل ڪري ٿو. هر هڪ نسلي طبقن لاءِ، ختم ٿيل طريقو ڪلاس مان voice()”آبائي“ طريقي کي تبديل ڪيو (جيڪو صرف ڪنسول ڏانهن ”وائس!“ ڪڍي ٿو). اوور رائيڊنگ جون ڪي حدون آهن: voice()Animalڪئين طريقي سان اوور رائڊنگ ميڪانيزم ڪم ڪندو آهي - 3
  1. ختم ٿيل طريقو لازمي طور تي ساڳيو دليل هجڻ گهرجي جيئن والدين طريقي سان.

    voiceجيڪڏهن والدين طبقي ۾ هڪ طريقو ان پٽ جي طور تي قبول ڪري ٿو String، ٻار جي طبقي ۾ اوور رائڊ ٿيل طريقو پڻ ان پٽ طور قبول ڪيو وڃي 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