Animal
جانورن کي ظاهر ڪيو وڃي ۽ ان ۾ هڪ طريقو ٺاهيو voice
- “ آواز ”:
public class Animal {
public void voice() {
System.out.println("Voice!");
}
}
جيتوڻيڪ اسان پروگرام لکڻ شروع ڪيو آهي، توهان گهڻو ڪري امڪاني مسئلو ڏسي سگهو ٿا: دنيا ۾ ڪيترائي جانور آهن، ۽ اهي سڀ ”ڳالهائي“ مختلف انداز ۾: ٻليون ميون، بتھ ڪوئڪ، سانپ هيس. اسان جو مقصد سادو آهي: ووٽ ڪاسٽ ڪرڻ لاءِ ڪيترائي طريقا ٺاهڻ کان پاسو ڪريو. 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 استعمال ڪرڻ جي عادت حاصل ڪريو، اهو پروگرام لکڻ جي رفتار کي تيز ڪندو! اهو رويو قائم ڪرڻ لاءِ جيڪو اسان چاهيون ٿا، اسان ڪجھ ڪم ڪيو:
- اسان هر نسل جي طبقي ۾ هڪ طريقو ٺاهيو آهي ساڳئي نالي سان والدين طبقي ۾ طريقو.
-
اسان مرتب ڪندڙ کي ٻڌايو ته اسان طريقي جو نالو ساڳيو نالو رکيو آهي جيئن والدين طبقي ۾ هڪ سبب لاءِ: اسان چاهيون ٿا ان جي رويي کي ختم ڪرڻ. هن "پيغام" لاءِ مرتب ڪندڙ ڏانهن، اسان هڪ @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();
}
}
ڪنسول آئوٽ: ووف! ميوو! ررر! شش! عظيم، هر شيء ڪم ڪري ٿو جيئن اهو گهرجي! اسان 4 حوالا متغير پيدا ڪيا آھن والدين طبقي جا Animal
، ۽ انھن کي تفويض ڪيو 4 مختلف شين جي نسلي طبقي جي. نتيجي طور، هر شئي مختلف طريقي سان عمل ڪري ٿو. هر هڪ نسلي طبقن لاءِ، ختم ٿيل طريقو ڪلاس مان voice()
”آبائي“ طريقي کي تبديل ڪيو (جيڪو صرف ڪنسول ڏانهن ”وائس!“ ڪڍي ٿو). اوور رائيڊنگ جون ڪي حدون آهن: voice()
Animal
-
ختم ٿيل طريقو لازمي طور تي ساڳيو دليل هجڻ گهرجي جيئن والدين طريقي سان.
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!"); } }
-
ختم ٿيل طريقو لازمي طور تي ساڳيو واپسي جو قسم هجڻ گهرجي جيئن والدين طريقي سان.
ٻي صورت ۾، اسان کي گڏ ڪرڻ جي غلطي ملي ويندي:
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