

Animal
ڪلاس آھي:
public class Animal {
String name;
int age;
}
اسان 2 ٻار طبقن جو اعلان ڪري سگھون ٿا: Cat
۽ Dog
. اهو لفظ extensions استعمال ڪندي ڪيو ويندو آهي .
public class Cat extends Animal {
}
public class Dog extends Animal {
}
اسان کي مستقبل ۾ اهو مددگار ثابت ٿي سگھي ٿو. Cat
مثال طور، جيڪڏهن ڪو ڪم آهي ته چوڪن کي پڪڙڻ، اسان پنهنجي پروگرام ۾ هڪ اعتراض ٺاهينداسين . جيڪڏهن ڪم هڪ لٺ جي پٺيان لڳائڻ آهي، ته اسان هڪ Dog
اعتراض استعمال ڪنداسين. ۽ جيڪڏهن اسان هڪ پروگرام ٺاهي سگهون ٿا جيڪو هڪ ويٽرنري ڪلينڪ ٺاهي، اهو Animal
ڪلاس سان ڪم ڪندو (۽ اهڙيء طرح ٻلي ۽ ڪتن ٻنهي جو علاج ڪرڻ جي قابل هوندو). اهو ياد رکڻ تمام ضروري آهي ته جڏهن ڪا شئي ٺاهي ويندي آهي ته ان جي بنيادي طبقي جي تعمير ڪندڙ کي پهريون ڀيرو سڏيو ويندو آهي . صرف ان کان پوء ٺاھيندڙ ختم ٿي ويندو آھي پروگرام ڪلاس جي ٺاھيندڙ کي عمل ڪري ٿو جيڪو اسان ٺاھي رھيا آھيون. ٻين لفظن ۾، جڏهن ڪا Cat
شئي ٺاهي ٿي، تعمير Animal
ڪندڙ کي پهريون ڀيرو هلايو ويندو آهي ، ۽ صرف بعد ۾ Cat
تعمير ڪندڙ تي عمل ڪيو ويندو آهي . ھن کي ڏسڻ لاء، ڪجھ ڪنسول ٻاھر شامل ڪريو Cat
۽ Animal
ٺاھيندڙن کي.
public class Animal {
public Animal() {
System.out.println("Animal constructor executed");
}
}
public class Cat extends Animal {
public Cat() {
System.out.println("Cat constructor executed!");
}
public static void main(String[] args) {
Cat cat = new Cat();
}
}
ڪنسول آئوٽ پُٽ: جانورن جي اڏاوت ڪندڙ کي قتل ڪيو ويو Cat Constructor execute ڪيو ويو! درحقيقت، اهو انهي طريقي سان ڪم ڪري ٿو! ڇو؟ ھڪڙو سبب اھو آھي ته ٻنھي طبقن جي وچ ۾ حصيداري ٿيل شعبن کي نقل ڪرڻ کان بچڻ. مثال طور، هر جانور کي دل ۽ دماغ هوندو آهي، پر هر جانور کي دم نه هوندو آهي. اسان دماغ ۽ دل جي شعبن جو اعلان ڪري سگهون ٿا، جيڪي سڀني جانورن لاءِ عام آهن، Animal
والدين طبقي ۾، ۽ ذيلي ڪلاس ۾ دم جوCat
ميدان . . ھاڻي اسان ھڪڙي طبقي ٺاھيندڙ جو اعلان ڪنداسين Cat
جيڪو سڀني 3 شعبن لاء دليل وٺندو آھي.
public class Cat extends Animal {
String tail;
public Cat(String brain, String heart, String tail) {
this.brain = brain;
this.heart = heart;
this.tail = tail;
}
public static void main(String[] args) {
Cat cat = new Cat("Brain", "Heart", "Tail");
}
}
نوٽ: تعمير ڪندڙ صحيح ڪم ڪري ٿو جيتوڻيڪ ڪلاس Cat
۾ دماغ ۽ دل جا شعبا نه آهن . اهي شعبا Animal
بنيادي طبقي مان "وراثت" آهن. وراثت واري طبقي کي بنيادي طبقي جي شعبن تائين رسائي آهي ، تنهنڪري اهي اسان جي Cat
طبقي ۾ نظر اچن ٿا. نتيجي طور، اسان کي ڪلاس ۾ انهن شعبن کي نقل ڪرڻ جي ضرورت ناهي Cat
. اسان انهن کي Animal
ڪلاس مان وٺي سگهون ٿا. وڌيڪ ڇا آهي، اسان واضح طور تي سڏي سگهون ٿا بنيادي طبقي جي تعمير ڪندڙ کي ٻار جي طبقي جي تعمير ڪندڙ ۾. هڪ بنيادي طبقي کي پڻ سڏيو ويندو آهي " سپر ڪلاس ". ان ڪري جاوا بنيادي ڪلاس کي ظاهر ڪرڻ لاءِ لفظ سپر استعمال ڪري ٿو. پوئين مثال ۾
public Cat(String brain, String heart, String tail) {
this.brain = brain;
this.heart = heart;
this.tail = tail;
}
اسان الڳ الڳ هر فيلڊ کي اسان جي والدين طبقي ۾ تفويض ڪيو. اسان کي اصل ۾ اهو ڪرڻ جي ضرورت ناهي. اهو ڪافي آهي والدين طبقي جي تعمير ڪندڙ کي سڏڻ ۽ ضروري دليلن کي پاس ڪرڻ لاءِ:
public class Animal {
String brain;
String heart;
public Animal(String brain, String heart) {
this.brain = brain;
this.heart = heart;
}
public class Cat extends Animal {
String tail;
public Cat(String brain, String heart, String tail) {
super(brain, heart);
this.tail = tail;
}
public static void main(String[] args) {
Cat cat = new Cat("Brain", "Heart", "Tail");
}
}
Constructor ۾ Cat
، اسان Animal
Constructor سڏيو ۽ ٻه شعبا گذري ويا. واضح طور تي شروع ڪرڻ لاءِ اسان وٽ صرف هڪ فيلڊ هو: tail ، جيڪو نه آهي Animal
. ياد رکو ته اسان ذڪر ڪيو آهي ته والدين طبقي جي تعمير ڪندڙ کي پهريون ڀيرو سڏيو ويندو آهي جڏهن ڪو اعتراض ٺاهيو وڃي ٿو؟ ان ڪري super() هميشه هڪ تعمير ڪندڙ ۾ پهريون هجڻ گهرجي! ٻي صورت ۾، تعمير ڪندڙ منطق جي ڀڃڪڙي ڪئي ويندي ۽ پروگرام هڪ غلطي پيدا ڪندو.
public class Cat extends Animal {
String tail;
public Cat(String brain, String heart, String tail) {
this.tail = tail;
super(brain, heart);// Error!
}
public static void main(String[] args) {
Cat cat = new Cat("Brain", "Heart", "Tail");
}
}
مرتب ڪندڙ ڄاڻي ٿو ته جڏهن ٻار طبقي جو هڪ اعتراض ٺاهيو ويندو آهي، بنيادي طبقي جي تعمير ڪندڙ کي پهريون سڏيو ويندو آهي. ۽ جيڪڏھن توھان ڪوشش ڪريو دستي طور تي ھن رويي کي تبديل ڪريو، مرتب ڪندڙ ان کي اجازت نه ڏيندو.
هڪ شئي ڪيئن ٺاهي وئي آهي
اسان اڳ ۾ ھڪڙو مثال ڏٺو آھي ھڪڙي بنيادي ۽ والدين طبقي سان:Animal
۽ Cat
. انهن ٻن طبقن کي مثال طور استعمال ڪندي، اسان هاڻي هڪ اعتراض ٺاهڻ ۽ متغير جي شروعات ڪرڻ جي عمل کي ڏسنداسين. اسان ڄاڻون ٿا ته جامد ۽ مثال (غير جامد) متغير آهن . اسان اهو پڻ ڄاڻون ٿا ته Animal
بنيادي طبقي ۾ متغير آهن، ۽ Cat
ٻار طبقي جي پنهنجي آهي. وضاحت لاءِ، اسان هر هڪ Animal
۽ Cat
ڪلاس ۾ هڪ جامد متغير شامل ڪنداسين. ڪلاس ۾ AnimalCount متغير ڌرتيءَ تي جانورن جي مجموعي تعداد جي نمائندگي ڪندو، ۽ catCount متغير ٻلي جي نسلن جي تعداد جي نشاندهي ڪندو. اضافي طور تي، اسان ٻنهي طبقن ۾ سڀني غير جامد متغيرن کي شروعاتي قدر تفويض ڪنداسين (جيڪو پوءِ تعمير ڪندڙ ۾ تبديل ڪيو ويندو). Animal
public class Animal {
String brain = "Initial value of brain in the Animal class";
String heart = "Initial value of heart in the Animal class";
public static int animalCount = 7700000;
public Animal(String brain, String heart) {
System.out.println("Animal base class constructor is running");
System.out.println("Have the variables of the Animal class already been initialized?");
System.out.println("Current value of static variable animalCount = " + animalCount);
System.out.println("Current value of brain in the Animal class = " + this.brain);
System.out.println("Current value of heart in the Animal class = " + this.heart);
System.out.println("Have the variables of the Cat class already been initialized?");
System.out.println("Current value of static variable catCount = " + Cat.catCount);
this.brain = brain;
this.heart = heart;
System.out.println("Animal base class constructor is done!");
System.out.println("Current value of brain = " + this.brain);
System.out.println("Current value of heart = " + this.heart);
}
}
public class Cat extends Animal {
String tail = "Initial value of tail in the Cat class";
static int catCount = 37;
public Cat(String brain, String heart, String tail) {
super(brain, heart);
System.out.println("The cat class constructor has started (The Animal constructor already finished)");
System.out.println("Current value of static variable catCount = " + catCount);
System.out.println("Current value of tail = " + this.tail);
this.tail = tail;
System.out.println("Current value of tail = " + this.tail);
}
public static void main(String[] args) {
Cat cat = new Cat("Brain", "Heart", "Tail");
}
}
تنهنڪري اسان Cat
ڪلاس جو هڪ نئون مثال ٺاهي رهيا آهيون، جيڪو وارث آهي Animal
. اسان ڪجهه تفصيلي ڪنسول آئوٽ شامل ڪيو آهي ڏسڻ لاءِ ته ڇا ٿي رهيو آهي ۽ ڪهڙي ترتيب ۾. اھو اھو آھي جيڪو ڏيکاريو ويندو جڏھن ھڪڙو Cat
اعتراض ٺاھيو ويندو: جانورن جو بنيادي ڪلاس ٺاھيندڙ ھلندو آھي ڇا جانورن جي ڪلاس جا متغير اڳ ۾ ئي شروع ڪيا ويا آھن؟ جامد متغير جي موجوده قيمت animalCount = 7700000 دماغ جي موجوده قيمت جانورن جي طبقي ۾ = دماغ جي شروعاتي قيمت جانورن جي طبقي ۾ دل جي موجوده قيمت = جانورن جي طبقي ۾ دل جي شروعاتي قيمت اڳ ۾ ئي ٻلي طبقي جا متغير آھن شروعات ڪئي وئي؟ جامد متغير جي موجوده قيمت catCount = 37 جانورن جو بنيادي ڪلاس تعمير ڪندڙ ٿي چڪو آهي! دماغ جي موجوده قيمت = دماغ جي موجوده قيمت دل = دل ٻلي ڪلاس جو تعمير ڪندڙ شروع ٿي چڪو آھي (جانور ٺاھيندڙ اڳ ۾ ئي ختم ٿي چڪو آھي) جامد متغير جي موجوده قيمت catCount = 37 دم جي موجوده قيمت = ٻلي جي ڪلاس ۾ دم جي شروعاتي قيمت tail جي موجوده قيمت = Tail سو، ھاڻي اسين واضح طور تي ڏسي سگھون ٿا ته متغير جي شروعات ۽ ڪنسٽرڪٽر ڪالن جو آرڊر جڏھن نئون اعتراض ٺاھيو ويندو آھي.
- بنيادي ڪلاس ( ) جا جامد متغير
Animal
شروع ڪيا ويا آهن. اسان جي حالت ۾،Animal
طبقي جي متغير جانورن جي ڳڻپ 7700000 تي مقرر ڪئي وئي آهي. -
چائلڊ ڪلاس جا جامد متغير (
Cat
) شروع ڪيا ويا آهن.نوٽ: اسان اڃا تائين
Animal
تعمير ڪندڙ جي اندر آهيون ۽ اسان اڳ ۾ ئي ڏيکاريا آهيون:Animal base class constructor هلندي آهي
ڇا جانورن جي ڪلاس جا متغير اڳ ۾ ئي شروع ڪيا ويا آهن؟
جامد متغير جي موجوده قيمت animalCount = 7700000
دماغ جي موجوده قيمت جانورن جي طبقي ۾ = دماغ جي شروعاتي قيمت جانورن جي طبقي ۾
دل جي موجوده قيمت = جانورن جي طبقي ۾ دل جي شروعاتي قيمت
اڳ ۾ ئي ٻلي طبقي جا متغير آھن شروعات ڪئي وئي؟
جامد متغير جي موجوده قيمت catCount = 37 -
پوءِ بيس ڪلاس جي غير جامد متغيرن کي شروع ڪيو وڃي ٿو. اسان خاص طور تي انھن کي ابتدائي قدر مقرر ڪيو، جيڪي پوء ٺاھيندڙ ۾ تبديل ڪيا ويا آھن. جانورن جي اڏاوت اڃا ختم نه ڪئي آهي، پر دماغ ۽ دل جا ابتدائي قدر اڳ ۾ ئي مقرر ڪيا ويا آهن:
اينيمل بيس ڪلاس ڪنسٽرڪٽر هلي رهيو آهي
ڇا اينيمل ڪلاس جا متغير اڳ ۾ ئي شروع ڪيا ويا آهن؟
جامد متغير جانورن جي موجوده قيمت = 7700000
دماغ جي موجوده قيمت جانورن جي طبقي ۾ = دماغ جي شروعاتي قيمت جانورن جي طبقي ۾
دل جي موجوده قيمت = جانورن جي طبقي ۾ دل جي شروعاتي قيمت -
بنيادي ڪلاس تعمير ڪندڙ شروع ٿئي ٿو.
اسان اڳ ۾ ئي پاڻ کي يقين ڏياريو آهي ته هي قدم چوٿون آهي: تعمير ڪندڙ جي شروعات ۾ پهرين ٽن مرحلن ۾Animal
، ڪيترائي متغير اڳ ۾ ئي قدر مقرر ڪيا ويا آهن. -
چائلڊ ڪلاس ( ) جا غير جامد شعبا
Cat
شروع ڪيا ويا آهن.
اهو ٿئي ٿو ان کان اڳ جوCat
ڪنسٽرڪٽر هلڻ شروع ٿئي.
جڏهن اهو هلڻ شروع ٿئي ٿو، دم متغير اڳ ۾ ئي هڪ قدر آهي:ٻلي ڪلاس جو ٺاھيندڙ شروع ٿي چڪو آھي (جانورن جو ٺاھيندڙ اڳ ۾ ئي ختم ٿي چڪو آھي) جامد متغير جي موجوده قيمت catCount = 37 دم جي موجوده قيمت = ٻلي ڪلاس ۾ دم جي شروعاتي قيمت
-
ٻار جي طبقي جي تعمير ڪندڙ
Cat
کي سڏيو ويندو آهي۽ اهو ئي آهي جيڪو هڪ شئي ٺاهڻ جهڙو آهي جاوا ۾!
مون کي اهو چوڻ گهرجي ته اسان روٽ لرننگ جا وڏا پرستار نه آهيون، پر اهو بهتر آهي ته ترتيب وار variable شروعات ۽ ڪنسٽرڪٽر ڪالن جي ترتيب کي ياد ڪيو وڃي .
اهو پروگرام جي وهڪري جي توهان جي سمجھ کي تمام گهڻو وڌائيندو، ۽ توهان جي شين جي حالت ڪنهن خاص وقت تي.
ان کان علاوه، ڪيترائي طبقا وراثت استعمال نٿا ڪن. انهي حالت ۾، بنيادي طبقي سان لاڳاپيل قدم لاڳو نه ٿيندا آهن.
وڌيڪ پڙهڻ: |
---|
GO TO FULL VERSION