Animal
(جانور):
public class Animal {
String name;
int age;
}
اسان ان لاء ٺاهي سگهون ٿا، مثال طور، 2 نسلي طبقن - Cat
۽ Dog
. اهو لفظ استعمال ڪندي ڪيو ويندو آهي extends
.
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 completed");
}
}
public class Cat extends Animal {
public Cat() {
System.out.println("The constructor Cat worked!");
}
public static void main(String[] args) {
Cat cat = new Cat();
}
}
ڪنسول آئوٽ:
Отработал конструктор Animal
Отработал конструктор Cat!
درحقيقت، اهو ڪيئن آهي اهو سڀ ڪجهه ڪم ڪري ٿو! ڇا لاءِ آهي؟ مثال طور، ٻن طبقن جي عام شعبن کي نقل ڪرڻ کان بچڻ لاء. مثال طور، هر جانور کي دل ۽ دماغ هوندو آهي، پر هر جانور کي دم نه هوندو آهي. اسان سڀني جانورن لاءِ عام شعبن جو اعلان ڪري سگھون ٿا والدين طبقي brain
۾ ، ۽ فيلڊ کي ذيلي ڪلاس ۾ . ھاڻي اسان ڪلاس لاءِ ٺاھيندڙ ٺاھينداسين ، جتي اسين سڀ 3 شعبا پاس ڪنداسين. heart
Animal
tail
Cat
Cat
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
۾ فيلڊ brain
۽ heart
. اهي شعبا بيس ڪلاس مان ”کڙي ويا“ Animal
. نسل پرست طبقي کي بنيادي طبقي جي شعبن تائين رسائي آهي، تنهنڪري Cat
اهي اسان جي طبقي ۾ نظر اچن ٿا. Cat
تنهن ڪري، اسان کي ڪلاس ۾ انهن شعبن کي نقل ڪرڻ جي ضرورت ناهي - اسان انهن کي ڪلاس مان وٺي سگهون ٿا Animal
. ان کان علاوه، اسان واضح طور تي سڏي سگهون ٿا بنيادي طبقي جي تعمير ڪندڙ کي نسل جي طبقي جي تعمير ڪندڙ ۾. بنيادي ڪلاس کي " سپر ڪلاس " پڻ سڏيو ويندو آهي، ڇو ته جاوا لفظ استعمال ڪري ٿو super
. پوئين مثال ۾
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");
}
}
تعمير ڪندڙ ۾، Cat
اسان تعمير ڪندڙ کي سڏيو Animal
۽ ان کي ٻه شعبا منظور ڪيا. اسان کي صرف هڪ فيلڊ کي واضح طور تي شروع ڪرڻو آهي - 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
طبقاتي متغير Animal
زمين تي جانورن جي نسلن جو ڪل تعداد هوندو، ۽ متغير catsCount
ٻلي جي نسلن جو تعداد هوندو. ان کان علاوه، اسان ٻنهي طبقن جي سڀني غير جامد متغيرن کي شروعاتي قدر تفويض ڪنداسين (جيڪو پوءِ ٺاھيندڙ ۾ تبديل ٿيندو).
public class Animal {
String brain = "The initial value of brain in the Animal class";
String heart = "The initial value of heart in the Animal class";
public static int animalCount = 7700000;
public Animal(String brain, String heart) {
System.out.println("The constructor of the Animal base class is being executed");
System.out.println("Have the variables of the Animal class already been initialized?");
System.out.println("The current value of the static variable animalCount = " + animalCount);
System.out.println("Current value of brain in class Animal = " + this.brain);
System.out.println("Current value of heart in class Animal = " + this.heart);
System.out.println("Have the variables of the Cat class already been initialized?");
System.out.println("The current value of the static variable catsCount = " + Cat.catsCount);
this.brain = brain;
this.heart = heart;
System.out.println("Animal base class constructor completed!");
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 = "The initial value of tail in the Cat class";
static int catsCount = 37;
public Cat(String brain, String heart, String tail) {
super(brain, heart);
System.out.println("The constructor of the Cat class has started (the Animal constructor has already been executed)");
System.out.println("The current value of the static variable catsCount = " + catsCount);
System.out.println("Current value tail = " + this.tail);
this.tail = tail;
System.out.println("Current value tail = " + this.tail);
}
public static void main(String[] args) {
Cat cat = new Cat("Brain", "Heart", "Tail");
}
}
Cat
تنهن ڪري، اسان ورثي واري طبقي جو هڪ نئون اعتراض ٺاهيون ٿا Animal
. اچو ته اسان جي پروگرام ۾ تفصيلي ڪنسول آئوٽ شامل ڪريو ڏسو ته ڇا ٿيندو ۽ ڪهڙي ترتيب ۾. اھو اھو آھي جيڪو ھڪڙو اعتراض ٺاھڻ جي نتيجي ۾ ڪنسول ڏانھن ٻاھر ٿيندو Cat
:
Выполняется конструктор базового класса Animal
Были ли уже проинициализированы переменные класса Animal?
Текущее meaning статической переменной animalCount = 7700000
Текущее meaning brain в классе Animal = Изначальное meaning brain в классе Animal
Текущее meaning heart в классе Animal = Изначальное meaning heart в классе Animal
Были ли уже проинициализированы переменные класса Cat?
Текущее meaning статической переменной catsCount = 37
Конструктор базового класса Animal завершил работу!
Текущее meaning brain = Мозг
Текущее meaning heart = Сердце
Конструктор класса Cat начал работу (конструктор Animal уже был выполнен)
Текущее meaning статической переменной catsCount = 37
Текущее meaning tail = Изначальное meaning tail в классе Cat
Текущее meaning tail = Хвост
تنهن ڪري، هاڻي اسان واضح طور تي ڏسي سگهون ٿا ته ڪهڙي ترتيب ۾ متغيرن جي شروعات ڪئي وئي آهي ۽ نئين شئي ٺاهڻ وقت تعمير ڪندڙن کي سڏيو ويندو آهي:
-
بنيادي ڪلاس ( ) جا جامد متغير شروع ڪيا ويا آهن . اسان جي حالت ۾، ڪلاس متغير کي قيمت 7700000 مقرر ڪيو ويو آهي.
Animal
animalCount
Animal
-
Descendant class ( ) جا جامد متغير شروع ڪيا ويا آهن . ڌيان ڏيو - اسان اڃا تائين تعمير ڪندڙ اندر آهيون ، ۽ ڪنسول اڳ ۾ ئي چوي ٿو:
Cat
Animal
Выполняется конструктор базового класса Animal Были ли уже проинициализированы переменные класса Animal? Текущее meaning статической переменной animalCount = 7700000 Текущее meaning brain в классе Animal = Изначальное meaning brain в классе Animal Текущее meaning heart в классе Animal = Изначальное meaning heart в классе Animal Были ли уже проинициализированы переменные класса Cat? Текущее meaning статической переменной catsCount = 37
-
اڳيون، بيس ڪلاس جا غير جامد متغير شروع ڪيا ويا آهن . اسان خاص طور تي انھن کي ابتدائي قدر مقرر ڪيو آھي، جيڪي پوء ٺاھيندڙ ۾ نون ڏانھن تبديل ڪيا ويا آھن. ٺاهيندڙ اڃا تائين پنهنجو ڪم مڪمل نه ڪيو آهي، پر ابتدائي قدر اڳ ۾ ئي مقرر ڪيا ويا آهن :
Animal
brain
heart
Выполняется конструктор базового класса Animal Были ли уже проинициализированы переменные класса Animal? Текущее meaning статической переменной animalCount = 7700000 Текущее meaning brain в классе Animal = Изначальное meaning brain в классе Animal Текущее meaning heart в классе Animal = Изначальное meaning heart в классе Animal
-
بنيادي ڪلاس تعمير ڪندڙ ڪم ڪرڻ شروع ڪري ٿو .
اسان اڳ ۾ ئي ڏسي چڪا آهيون ته هي اسٽيج صرف چوٿون آهي قطار ۾: پهرين ٽن نقطن ۾، وقت تي تعمير ڪندڙ ڪم ڪرڻ شروع ڪري ٿو،
Animal
ڪيترائي متغير اڳ ۾ ئي قدر مقرر ڪيا ويا آهن. -
ٻار جي طبقي جي غير جامد شعبن کي شروع ڪرڻ ( ).
Cat
اهو ٿيڻ کان اڳ ڊزائنر
Cat
ڪم ڪرڻ شروع ڪري ٿو.وقت تي هن ڪم ڪرڻ شروع ڪيو، متغير
tail
اڳ ۾ ئي هڪ قدر هو:Конструктор класса Cat начал работу (конструктор Animal уже был выполнен) Текущее meaning статической переменной catsCount = 37 Текущее meaning tail = Изначальное meaning tail в классе Cat
-
نسلي طبقي جي تعمير ڪندڙ کي سڏيو ويندو آهي
Cat
GO TO FULL VERSION