JavaRush /Java Blog /Random-TK /Esasy synp gurluşykçylary

Esasy synp gurluşykçylary

Toparda çap edildi
Salam! Geçen gezek gurluşykçylar hakda gürleşdik we olar hakda köp zat öwrendik. Indi esasy synp gurluşykçylary ýaly bir zat hakda gürleşeris. Esasy synp näme ? Hakykat, Java-da birnäçe dürli synpyň umumy gelip çykyşy bolup biler. Oňa mirasEsasy synp gurluşykçylary - 2 diýilýär . Birnäçe nesil synplarynda bir umumy ata-babalar synpy bolup biler. Mysal üçin, synpymyzyň (haýwanyň) bardygyny göz öňüne getiriň: Animal
public class Animal {

   String name;
   int age;
}
Munuň üçin, mysal üçin, 2 nesil synpyny döredip bileris - Catwe 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 Catişlär . Muny anyklamak üçin geliň, konstruktorlara we konsola çykalyň. AnimalCatCatAnimal
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. heartAnimaltailCatCat
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ň Catmeýdanlary bolmasa brain- da heart. Bu meýdanlar esasy synpdan “çekildi” Animal. Nesil synpy esasy synpyň meýdanlaryna girip biler, şonuň üçin Catolar 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 Catkonstruktora jaň etdik Animalwe oňa iki meýdan geçdik. Diňe bir meýdany aç-açan başlamaly - tailbu 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 - Animalwe 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. AnimalAýdyňlyk Catüçin synpa bir statiki üýtgeýji goşalyň . animalCountSynp üýtgeýjisi Animalýerdäki haýwan görnüşleriniň umumy sany, üýtgeýän bolsa catsCountpiş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:
  1. Esasy synpyň ( ) statiki üýtgeýjileri başlanýar . Biziň ýagdaýymyzda, synp üýtgeýjisine 7700000 bahasy berilýär.AnimalanimalCountAnimal

  2. Nesil synpynyň statiki üýtgeýjileri başlanýar . Üns beriň - biz henizem konstruktoryň içinde , konsol eýýäm şeýle diýýär:CatAnimal

    
        Выполняется конструктор базового класса Animal
        Были ли уже проинициализированы переменные класса Animal?
        Текущее meaning статической переменной animalCount = 7700000
        Текущее meaning brain в классе Animal = Изначальное meaning brain в классе Animal
        Текущее meaning heart в классе Animal = Изначальное meaning heart в классе Animal
        Были ли уже проинициализированы переменные класса Cat?
        Текущее meaning статической переменной catsCount = 37
  3. 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:Animalbrainheart

    
        Выполняется конструктор базового класса Animal
        Были ли уже проинициализированы переменные класса Animal?
        Текущее meaning статической переменной animalCount = 7700000
        Текущее meaning brain в классе Animal = Изначальное meaning brain в классе Animal
        Текущее meaning heart в классе Animal = Изначальное meaning heart в классе Animal
  4. 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, Animalköp üýtgeýjä eýýäm bahalar berildi.

  5. Çaga synpynyň statik däl meýdanlaryny başlamak ( ).Cat

    Dizaýner Catişe başlamazdan öň bolýar.

    Işläp başlanda üýtgeýjiniň taileýýäm gymmaty bardy:

    
    Конструктор класса Cat начал работу (конструктор Animal уже был выполнен)
    Текущее meaning статической переменной catsCount = 37
    Текущее meaning tail = Изначальное meaning tail в классе Cat
  6. Nesil synpynyň konstruktory diýilýär Cat

Java-da obýekt döretmek prosesi şeýle! Düwürtmegiň uly muşdaklary däldigimizi aýtmalydyrys, ýöne üýtgeýänleri başlamagyň we konstruktorlary çagyrmagyň tertibini ýatda saklamak we geljek üçin ýatlamak has gowudyr . Bu, islendik pursatda programmanyň gidişine we obýektleriňiziň ýagdaýyna düşünişiňizi ep-esli ýokarlandyrar. Mundan başga-da, sapaklarda köplenç göni ene-atalar sapaklary ýok (superklasslar / esasy synplar). Bu ýagdaýda esasy synp bilen baglanyşykly zatlar ýerine ýetirilmez.
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION