JavaRush /Java Blog /Random-TK /Statik höwürtge synplary

Statik höwürtge synplary

Toparda çap edildi
Salam! Java-da ýerleşdirilen sapaklaryň mowzugyny öwrenmäge dowam edýäris. Geçen sapakda statik däl höwürtgelenen synplar ýa-da olaryň atlandyrylyşy ýaly içki synplar hakda gürleşdik. Statik höwürtge synplary - 2Bu gün geliň, başga bir topara geçeliň we statiki höwürtgelenen synplara has içgin seredeliň. Statik höwürtge synplary - 3Beýleki toparlardan nähili tapawutlanýarlar? Şeýle synp yglan edilende, eýýäm tanyş statiki açar söz ulanýarys:
public class Boeing737 {

   private int manufactureYear;
   private static int maxPassengersCount = 300;

   public Boeing737(int manufactureYear) {
       this.manufactureYear = manufactureYear;
   }

   public int getManufactureYear() {
       return manufactureYear;
   }

   public static class Drawing {

       public static int getMaxPassengersCount() {

           return maxPassengersCount;
       }
   }
}
Statiki höwürtge synplary - 4Boeing737Bu mysalda, bu modeliň uçaryny döredýän daşarky synpymyz bar . We bir parametrli konstruktor bar: öndürilen ýyl ( int manufactureYear). Şeýle hem bir statiki üýtgeýji bar int maxPassengersCount- ýolagçylaryň iň köp sany. Birmeňzeş modeldäki ähli uçarlar üçin birmeňzeş bolar, şonuň üçin bize diňe bir nusga gerek. Mundan başga-da, statiki içki synp - uçar meýilnamasy bar Drawing. Bu synpda uçar hakda ähli hyzmat maglumatlaryny jemläp bileris. Mysal üçin, ýönekeýlik üçin, ony önümçilik ýyly bilen çäkledik, ýöne başga-da köp maglumatlary öz içine alyp biler. Statik höwürtge synplary - 5Geçen leksiýada ara alyp maslahatlaşyşymyz ýaly, şunuň ýaly höwürtge synpy döretmek encapsulýasiýany ýokarlandyrýar we has real abstraksiýany öňe sürýär. Statik we statik däl höwürtge synplarynyň arasynda näme tapawut bar? 1. Statik synp obýekti Drawingdaşarky synpyň belli bir mysalyna salgylanmany saklamaýar. Soňky leksiýadan welosiped bilen mysal alyň:
public class Bicycle {

   private String model;
   private int mawWeight;

   public Bicycle(String model, int mawWeight) {
       this.model = model;
       this.mawWeight = mawWeight;
   }

   public void start() {
       System.out.println("Go!");
   }

   public class SteeringWheel {

       public void right() {
           System.out.println("Steering wheel to the right!");
       }

       public void left() {

           System.out.println("Steering wheel to the left!");
       }
   }

}
SteeringWheelŞol ýerde daşarky synpyň (welosipediň) obýektine salgylanmanyň içki synpyň (ruluň) her mysalyna üns bermän nädip geçýändigi hakda gürleşdik Bicycle. Daşarky synpyň obýekti bolmasa, içki synpyň obýekti bolup bilmezdi. Statiki höwürtgelenen synplar üçin bu dogry däl. Statik höwürtge synpynyň obýekti özbaşdak aňsatlyk bilen bolup biler. Bu nukdaýnazardan, statiki synplar statik däl synplara garanyňda has “garaşsyz”. Onlyeke-täk zat, şeýle obýekt döredilende daşarky synpyň adyny görkezmeli:
public class Main {

   public static void main(String[] args) {

       Boeing737.Drawing drawing1 = new Boeing737.Drawing();
       Boeing737.Drawing drawing2 = new Boeing737.Drawing();
   }
}
Näme üçin synpy statik etdik Drawing, ýöne soňky leksiýada synp Seat(welosiped oturgyjy) statik däldi? Geçen gezekki ýaly, mysala düşünmek üçin azajyk "pelsepe" goşalyň :) Tigirli oturgyçdan tapawutlylykda, çyzuwyň düýp manysy uçaryň düýp manysy bilen baglanyşykly däl. Aýry oturgyç obýekti, welosiped bolmasa, köplenç manysyz bolar (hemişe bolmasa-da - bu barada soňky sapakda gürleşdik). Çyzuwyň düýp manysy bar. Mysal üçin, uçar abatlamagy meýilleşdirýän inersenerler üçin peýdaly bolup biler. Olara meýilnamalaşdyrmak üçin uçaryň özi gerek däl we islendik ýerde ýerleşip biler - diňe bir çyzgy ýeterlikdir. Mundan başga-da, şol bir modeldäki ähli uçarlar üçin çyzgy henizem şol bir bolar, şonuň üçin welosipedli oturgyç ýaly berk baglanyşyk ýok. Şonuň üçin obýektiň Drawingbelli bir uçar obýektine baglanyşyk zerurlygy ýok. 2. Daşarky synpyň üýtgeýänlerine we usullaryna dürli giriş. Statik höwürtge synpy diňe daşarky synpyň statiki meýdanlaryna girip biler. Mysal üçin, synpda daşarky synpdan statiki üýtgeýjiniň bahasyny yzyna gaýtaryp berýän Drawingusul bar . Şeýle-de bolsa, bahany yzyna gaýtarmak üçin usul döredip bilmeris . Galyberse-de, üýtgeýji statik däl, bu belli bir meselä degişlidigini aňladýar . Öňem bilşimiz ýaly, statiki höwürtgelenen synplarda daşarky synpyň obýekti aňsatlyk bilen ýitip biler. Şonuň üçin çäklendirme :) Daşarky synpdaky statiki üýtgeýjiniň haýsy giriş üýtgeýjisiniň bolmagy möhüm däl. Şeýle bolsa-da , statiki höwürtge synpyndan girip bolar. Aboveokardakylaryň hemmesi diňe statiki üýtgeýänlere däl, eýsem statiki usullara hem degişlidir. Möhüm! Içerki synp jarnamasyndaky söz diňe bir obýektiň döredilip bilinjekdigini aňlatmaýar. Obýektleri üýtgeýjiler bilen garyşdyrmaň. Statik üýtgeýjiler hakda aýdýan bolsak, meselem, statiki synp üýtgeýjisi bir nusgada bar. Aöne höwürtgelenen klasa ulanylanda, diňe obýektlerinde daşarky synpyň obýektlerine salgylanmalaryň ýokdugyny aňladýar. Isleýşimiz ýaly köp obýekt döredip bileris: getMaxPassengersCount()maxPassengersCountgetManufactureYear()DrawingmanufactureYearmanufactureYearBoeing737privatestaticmaxPassangersCountstatic
public class Boeing737 {

   private int manufactureYear;
   private static int maxPassengersCount = 300;

   public Boeing737(int manufactureYear) {
       this.manufactureYear = manufactureYear;
   }

   public int getManufactureYear() {
       return manufactureYear;
   }

   public static class Drawing {

       private int id;

       public Drawing(int id) {
           this.id = id;
       }

       public static int getPassengersCount() {

           return maxPassengersCount;
       }

       @Override
       public String toString() {
           return "Drawing{" +
                   "id=" + id +
                   '}';
       }

       public static void main(String[] args) {

           for (int i = 1; i < 6; i++) {

               Boeing737.Drawing drawing = new Boeing737.Drawing(i);
               System.out.println(drawing);
           }
       }
   }
}
Usuly main()gönüden-göni höwürtgelenen synpda yglan etdik (munuň üçin belli bir sebäp ýok - munuň mümkindigini bilmek üçin) we 5 sany obýekt döretdik Drawing. Daşarky synpyň ýekeje obýektiniň ýokdugyna garamazdan. Görşüňiz ýaly, hiç hili mesele ýokdy :) Konsol çykyşy:

Drawing{id=1}
Drawing{id=2}
Drawing{id=3}
Drawing{id=4}
Drawing{id=5}
Bu sapagymyzy tamamlaýar! Şeýle bolan ýagdaýynda, size Oracle resminamalarynda olar hakda bölüme baglanyşyk goýaryn . Düşnüksiz nokatlar bar bolsa okaň. Indi birnäçe meseläni çözmegiň wagty geldi! :)
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION