JavaRush /Блоги Java /Random-TG /Синфҳои лонаҳои статикӣ

Синфҳои лонаҳои статикӣ

Дар гурӯҳ нашр шудааст
Салом! Мо омӯхтани мавзӯи синфҳои лона дар Java идома медиҳем. Дар дарси охир мо дар бораи синфҳои лонаҳои ғайристатикӣ ё тавре ки онҳоро низ меноманд, синфҳои дохилӣ сӯҳбат кардем. Синфҳои лонаҳои статикӣ - 2Имрӯз биёед ба гурӯҳи дигар гузарем ва ба синфҳои лонаҳои статикӣ бодиққат назар кунем. Синфҳои лонаҳои статикӣ - 3Онҳо аз дигар гурӯҳҳо чӣ фарқ доранд? Ҳангоми эълони чунин синф, мо калимаи калидии статикии аллакай шиносро истифода мебарем:
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;
       }
   }
}
Синфҳои лонаҳои статикӣ - 4Дар ин мисол, мо як синфи беруна дорем Boeing737, ки як ҳавопаймои ин моделро эҷод мекунад. Ва вай як конструктор дорад, ки як параметр дорад: соли истеҳсол ( int manufactureYear). Инчунин як тағирёбандаи статикӣ вуҷуд дорад int maxPassengersCount- шумораи максималии мусофирон. Он барои ҳамаи ҳавопаймоҳои як модел якхела хоҳад буд, бинобар ин ба мо танҳо як нусха лозим аст. Илова бар ин, он дорои синфи статикии дохилӣ Drawing- нақшаи ҳавопаймо. Дар ин синф мо метавонем ҳама маълумоти хидматрасониро дар бораи ҳавопаймо фаро гирем. Дар мисоли мо, барои содда, мо онро бо соли истеҳсол маҳдуд кардем, аммо он метавонад маълумоти зиёди дигарро дар бар гирад. Синфҳои лонаҳои статикӣ - 5Тавре ки мо дар лексияи охирин муҳокима кардем, эҷоди чунин синфи лона инкапсуляцияро зиёд мекунад ва ба абстраксияи воқеӣ мусоидат мекунад. Фарқи байни синфҳои лонаҳои статикӣ ва ғайристатикӣ чӣ гуна аст? 1. Объекти синфи статикӣ Drawingистинодро ба мисоли мушаххаси синфи берунӣ нигоҳ намедорад. Мисоли лексияи охиринро бо велосипед ба хотир оред:
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истинод ба an objectи синфи беруна (велосипед) ба ҳар як мисоли синфи дарунӣ (чархи руль) бе мо пайхас карда мешавад Bicycle. Бе an objectи синфи берунӣ, an objectи синфи ботинӣ вуҷуд дошта наметавонад. Ин барои синфҳои лонаҳои статикӣ дуруст нест. Объекти синфи лонашудаи статикӣ метавонад мустақилона ба осонӣ вуҷуд дошта бошад. Аз ин лиҳоз, синфҳои статикӣ нисбат ба синфҳои ғайристатикӣ бештар “мустақил” мебошанд. Ягона нукта дар он аст, ки ҳангоми сохтани чунин an object шумо бояд номи синфи беруниро муайян кунед:
public class Main {

   public static void main(String[] args) {

       Boeing737.Drawing drawing1 = new Boeing737.Drawing();
       Boeing737.Drawing drawing2 = new Boeing737.Drawing();
   }
}
Чаро мо синфро Drawingстатикӣ кардем, аммо дар лексияи охирин синф Seat(курсии велосипед) ғайристатикӣ буд? Мисли дафъаи гузашта, барои фаҳмидани мисол каме «фалсафа» илова мекунем :) Баръакси курсии велосипед, моҳияти расм ба моҳияти ҳавопаймо он қадар сахт баста нашудааст. Объекти курсии алоҳида, бе велосипед, аксар вақт бемаънӣ хоҳад буд (гарчанде ки на ҳамеша - мо дар ин бора дар дарси гузашта сӯҳбат карда будем). Моҳияти расм дар худ маъно дорад. Масалан, он метавонад барои муҳандисоне, ки таъмири ҳавопаймоҳоро ба нақша гирифтаанд, муфид бошад. Онҳо барои банақшагирӣ ба худи ҳавопаймо ниёз надоранд ва онҳоро дар ҳама ҷо ҷойгир кардан мумкин аст - танҳо як расм кофӣ аст. Илова бар ин, барои ҳама ҳавопаймоҳои як модел, расм ҳамоно хоҳад буд, бинобар ин, чунин пайвасти сахт ба монанди курсии велосипед вуҷуд надорад. Аз ин рӯ, an object Drawingба як an objectи мушаххаси ҳавопаймо ниёз надорад. 2. Дастрасии гуногун ба тағирёбандаҳо ва усулҳои синфи беруна. Синфи лонашудаи статикӣ метавонад танҳо ба майдонҳои статикии синфи берунӣ дастрасӣ пайдо кунад. Дар мисоли мо, синф Drawingусуле дорад getMaxPassengersCount(), ки арзиши тағирёбандаи статикиро maxPassengersCountаз синфи беруна бармегардонад. Аммо, мо наметавонем усулеро getManufactureYear()дар Drawingбаргардонидани арзиш эҷод кунем manufactureYear. Дар ниҳоят, тағирёбанда manufactureYearғайристатикӣ аст, яъне он бояд ба як мисоли мушаххас тааллуқ дошта бошад Boeing737. Ва тавре ки мо аллакай фаҳмидем, дар ҳолати синфҳои лонаҳои статикӣ, an objectи синфи берунӣ метавонад ба осонӣ гум шавад. Аз ин рӯ, маҳдудият :) Фарқ надорад, ки тағирёбандаи статикӣ дар синфи берунӣ кадом тағирдиҳандаи дастрасӣ дорад. Ҳатто агар он бошад ҳам private, дастрасӣ аз синфи лонашудаи статикӣ вуҷуд дорад. Ҳамаи инҳо на танҳо ба дастрасӣ ба тағирёбандаҳои статикӣ, балки ба усулҳои статикӣ низ дахл доранд. МУҲИМ! Калима staticдар эъломияи синфҳои дохилӣ маънои онро надорад, ки танҳо як an object сохтан мумкин аст. Объектҳоро бо тағирёбандаҳо омехта накунед. Агар мо дар бораи тағирёбандаҳои статикӣ сухан ронем, бале, як тағирёбандаи синфи статикӣ, масалан, maxPassangersCountдар як нусха мавҷуд аст. Аммо вақте ки ба синфи лона истифода мешавад, staticин танҳо маънои онро дорад, ки an objectҳои он истинод ба an objectҳои синфи берунӣ надоранд. Ва мо метавонем an objectҳои зиёдеро, ки мехоҳем, созем:
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);
           }
       }
   }
}
Мо усулро main()бевосита дар синфи лона эълон кардем (барои ин ягон сабаби махсус вуҷуд надорад - танҳо барои он ки шумо бидонед, ки ин имконпазир аст) ва 5 an object эҷод кардем Drawing. Сарфи назар аз он ки мо ягон an objectи синфи берунй надорем. Тавре ки шумо мебинед, ҳеҷ мушкиле вуҷуд надошт :) Натиҷаи консол:

Drawing{id=1}
Drawing{id=2}
Drawing{id=3}
Drawing{id=4}
Drawing{id=5}
Ин дарси моро ба охир мерасонад! Дар ҳар сурат, ман ба шумо пайвандеро ба қисмат дар бораи онҳо дар ҳуҷҷатҳои Oracle мегузорам . Агар ягон нуктаи норавшан бошад, онро хонед. Акнун вакти халли як-ду масъала аст! :)
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION