Animal
public class Animal {
String name;
int age;
}
Munuň üçin, mysal üçin, 2 nesil synpyny döredip bileris - Cat
we Dog
. Bu açar söz bilen edilýär extends
.
public class Cat extends Animal {
}
public class Dog extends Animal {
}
Bu geljekde biziň üçin peýdaly bolup biler. Mysal üçin, wezipe syçanlary tutmak bolsa, programmada bir obýekt dörederis Cat
. Eger wezipe taýagyň yzyndan ylgamak bolsa, onda obýekti ulanýarys Dog
. Weterinariýa klinikasyny simulasiýa edýän bir programma döretsek, synp bilen işleşer Animal
(pişikleri we itleri bejermek üçin). Geljek üçin ýatdan çykarmaly däldiris, bir obýekt döredilende, onuň esasy synpynyň konstruktoryna ilki diýilýär , diňe şondan soň döredýän obýektimiziň synpynyň konstruktory diýilýär. .Agny, bir obýekt döredilende ilki synp konstruktory , soň bolsa konstruktor Cat
işlär . Muny anyklamak üçin geliň, konstruktorlara we konsola çykalyň. 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();
}
}
Konsol çykyşy:
Отработал конструктор Animal
Отработал конструктор Cat!
Hakykatdanam, bularyň hemmesi şeýle işleýär! Bu näme üçin? Mysal üçin, iki synpyň umumy meýdanlaryny köpeltmezlik üçin. Mysal üçin, her haýwanyň ýüregi we beýni bar, ýöne her haýwanyň guýrugy ýok. Ene-atalar synpyndaky brain
ähli haýwanlar üçin umumy meýdanlary we kiçi klasdaky meýdanlary yglan edip bileris . Indi synp üçin konstruktor dörederis , bu ýerde 3 meýdançanyň hemmesini geçeris. 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");
}
}
Üns beriň:konstruktor üstünlikli işleýär, synpyň Cat
meýdanlary bolmasa brain
- da heart
. Bu meýdanlar esasy synpdan “çekildi” Animal
. Nesil synpy esasy synpyň meýdanlaryna girip biler, şonuň üçin Cat
olar biziň synpymyzda görünýär. Cat
Şonuň üçin bu meýdanlary synpda köpeltmeli däl - olary synpdan alyp bileris Animal
. Mundan başga-da, nesil synpynyň konstruktorynda esasy synpyň konstruktoryny aç-açan atlandyryp bileris. Esasy klasa “ superklass ” hem diýilýär, şonuň üçin Java açar söz ulanýar super
. Öňki mysalda
public Cat(String brain, String heart, String tail) {
this.brain = brain;
this.heart = heart;
this.tail = tail;
}
Ene-atalar synpymyzdaky her bir ugry aýratyn belledik. Aslynda muny etmek hökman däl. Ene synpynyň konstruktoryna jaň edip, oňa zerur parametrleri bermek ýeterlikdir:
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");
}
}
Konstruktorda Cat
konstruktora jaň etdik Animal
we oňa iki meýdan geçdik. Diňe bir meýdany aç-açan başlamaly - tail
bu Animal
ýok. Bir obýekt döredilende, ene synpyň konstruktoryna ilki diýilýändigini nädip aýdanymyzy ýadyňyzdamy? Diýmek, super()
konstruktorda söz hemişe birinji bolmaly! Otherwiseogsam, konstruktorlaryň logikasy bozular we programma ýalňyşlyk döreder.
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");
}
}
Düzüji, nesil synpynyň obýektini döredeninde, esasy synpyň konstruktoryna ilki diýilýär. Bu gylyk-häsiýeti el bilen üýtgetjek bolsaňyz, rugsat bermez.
Obýekt döretmek prosesi.
Oveokarda esasy we ene-atalar synpy bilen bir mysal gördük -Animal
we Cat
. Indi bu iki synpy mysal hökmünde ulanyp, bir obýekt döretmek we üýtgeýänleri başlamak prosesine serederis. Üýtgeýjileriň statiki we mysal üýtgeýjileridigini bilýäris (statik däl). Şeýle hem, esasy synpyň Animal
öz üýtgeýjileriniň, nesil synpynyň hem bardygyny bilýäris Cat
. Animal
Aýdyňlyk Cat
üçin synpa bir statiki üýtgeýji goşalyň . animalCount
Synp üýtgeýjisi Animal
ýerdäki haýwan görnüşleriniň umumy sany, üýtgeýän bolsa catsCount
pişik görnüşleriniň sany bolar. Mundan başga-da, iki synpyň statiki däl üýtgeýjilerine başlangyç bahalary belläris (soň konstruktorda üýtgär).
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
Şeýlelik bilen, miras galan synpyň täze obýektini döredýäris Animal
. Näme boljagyny we haýsy tertipde boljakdygyny görmek üçin programmamyza jikme-jik konsol çykyşyny goşalyň. Obýekt döretmek netijesinde konsola çykjak zat şu 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 = Хвост
Şeýlelikde, indi täze obýekt döredilende haýsy tertip üýtgeýjileriň başlanýandygyny we konstruktorlaryň çagyrylýandygyny anyk görüp bileris:
-
Esasy synpyň ( ) statiki üýtgeýjileri başlanýar . Biziň ýagdaýymyzda, synp üýtgeýjisine 7700000 bahasy berilýär.
Animal
animalCount
Animal
-
Nesil synpynyň statiki üýtgeýjileri başlanýar . Üns beriň - biz henizem konstruktoryň içinde , konsol eýýäm şeýle diýýär:
Cat
Animal
Выполняется конструктор базового класса Animal Были ли уже проинициализированы переменные класса Animal? Текущее meaning статической переменной animalCount = 7700000 Текущее meaning brain в классе Animal = Изначальное meaning brain в классе Animal Текущее meaning heart в классе Animal = Изначальное meaning heart в классе Animal Были ли уже проинициализированы переменные класса Cat? Текущее meaning статической переменной catsCount = 37
-
Ondan soň, esasy synpyň statik däl üýtgeýjileri başlaýar . Olara başlangyç bahalary aýratyn belledik, soň bolsa konstruktoryň täzelerine üýtgedilýär. Konstruktor entek işini tamamlamady, ýöne başlangyç bahalar eýýäm bellendi:
Animal
brain
heart
Выполняется конструктор базового класса Animal Были ли уже проинициализированы переменные класса Animal? Текущее meaning статической переменной animalCount = 7700000 Текущее meaning brain в классе Animal = Изначальное meaning brain в классе Animal Текущее meaning heart в классе Animal = Изначальное meaning heart в классе Animal
-
Esasy synp konstruktory işe başlaýar .
Bu tapgyryň yzly-yzyna dördünji bolandygyny eýýäm gördük: ilkinji üç nokatda, konstruktor işe başlanda,
Animal
köp üýtgeýjä eýýäm bahalar berildi. -
Çaga synpynyň statik däl meýdanlaryny başlamak ( ).
Cat
Dizaýner
Cat
işe başlamazdan öň bolýar.Işläp başlanda üýtgeýjiniň
tail
eýýäm gymmaty bardy:Конструктор класса Cat начал работу (конструктор Animal уже был выполнен) Текущее meaning статической переменной catsCount = 37 Текущее meaning tail = Изначальное meaning tail в классе Cat
-
Nesil synpynyň konstruktory diýilýär
Cat
GO TO FULL VERSION