CodeGym /جاوا بلاگ /Random-UR /جاوا میں اوور رائڈنگ کا طریقہ
John Squirrels
سطح
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 () ، وغیرہ
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION