Animal
جس میں جانوروں کی نشاندہی ہوتی ہے اور اس میں ایک طریقہ بنائیں voice
- " آواز ":
public class Animal {
public void voice() {
System.out.println("Voice!");
}
}
اگرچہ ہم نے ابھی پروگرام لکھنا شروع کیا ہے، آپ غالباً ممکنہ مسئلہ کو دیکھ سکتے ہیں: دنیا میں بہت سارے جانور ہیں، اور وہ سب مختلف طریقے سے "بولتے ہیں": بلیوں میانو، بطخیں قہقہے، سانپ ہستے ہیں۔ ہمارا مقصد آسان ہے: ووٹ ڈالنے کے طریقوں کا ایک گروپ بنانے سے گریز کریں۔ 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 دبائیں اور مینو سے " اوور رائڈ طریقے... " کو منتخب کریں۔ شروع سے ہی ہاٹکیز استعمال کرنے کی عادت ڈالیں، اس سے پروگرام لکھنے میں تیزی آئے گی! جو رویہ ہم چاہتے تھے اسے ترتیب دینے کے لیے، ہم نے کچھ چیزیں کیں:
- ہم نے ہر نسلی طبقے میں ایک طریقہ بنایا ہے جس کا نام پیرنٹ کلاس میں ہے۔
-
ہم نے مرتب کرنے والے کو بتایا کہ ہم نے طریقہ کار کا نام ایک وجہ سے پیرنٹ کلاس میں رکھا ہے: ہم اس کے رویے کو اوور رائیڈ کرنا چاہتے ہیں۔ مرتب کرنے والے کو اس "پیغام" کے لیے، ہم طریقہ پر @Override تشریح ڈالتے ہیں ۔
ایک طریقہ کے اوپر رکھی گئی @Override تشریح کمپائلر کو بتاتی ہے (اور پروگرامرز آپ کا کوڈ بھی پڑھ رہے ہیں): "سب کچھ ٹھیک ہے، یہ کوئی غلطی یا میری بھول نہیں ہے۔ مجھے یاد ہے کہ ایسا طریقہ پہلے سے موجود ہے، اور میں اسے اوور رائڈ کرنا چاہتا ہوں۔" - ہم نے وہ نفاذ لکھا جس کی ہمیں ہر نسلی طبقے کے لیے ضرورت تھی۔ جب بلایا جائے تو سانپ
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
-
اوور رائیڈ شدہ طریقہ میں وہی دلیلیں ہونی چاہئیں جو پیرنٹ طریقہ کے ہیں۔
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!"); } }
-
اوور رائیڈ شدہ طریقہ میں واپسی کی وہی قسم ہونی چاہیے جو کہ پیرنٹ طریقہ ہے۔
بصورت دیگر، ہمیں ایک تالیف کی غلطی موصول ہوگی:
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!"; } }
-
ایک اوور رائیڈڈ طریقہ کا رسائی موڈیفائر بھی "اصل" سے مختلف نہیں ہو سکتا:
public class Animal { public void voice() { System.out.println("Voice!"); } } public class Cat extends Animal { @Override private void voice() { //error! System.out.println("Meow!"); } }
voice()
طریقوں کے ایک گروپ کے بجائے سب کے لیے ایک طریقہ voiceDog()
، voiceCat()
وغیرہ۔
GO TO FULL VERSION