Салом! Мо омӯхтани мавзӯи синфҳои лона дар Java идома медиҳем. Дар дарси охир мо дар бораи синфҳои лонаҳои ғайристатикӣ ё тавре ки онҳоро низ меноманд, синфҳои дохилӣ сӯҳбат кардем. Имрӯз биёед ба гурӯҳи дигар гузарем ва ба синфҳои лонаҳои статикӣ бодиққат назар кунем. Онҳо аз дигар гурӯҳҳо чӣ фарқ доранд? Ҳангоми эълони чунин синф, мо калимаи калидии статикии аллакай шиносро истифода мебарем:
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;
}
}
}
Дар ин мисол, мо як синфи беруна дорем Boeing737
, ки як ҳавопаймои ин моделро эҷод мекунад. Ва вай як конструктор дорад, ки як параметр дорад: соли истеҳсол ( int manufactureYear
). Инчунин як тағирёбандаи статикӣ вуҷуд дорад int maxPassengersCount
- шумораи максималии мусофирон. Он барои ҳамаи ҳавопаймоҳои як модел якхела хоҳад буд, бинобар ин ба мо танҳо як нусха лозим аст. Илова бар ин, он дорои синфи статикии дохилӣ Drawing
- нақшаи ҳавопаймо. Дар ин синф мо метавонем ҳама маълумоти хидматрасониро дар бораи ҳавопаймо фаро гирем. Дар мисоли мо, барои содда, мо онро бо соли истеҳсол маҳдуд кардем, аммо он метавонад маълумоти зиёди дигарро дар бар гирад. Тавре ки мо дар лексияи охирин муҳокима кардем, эҷоди чунин синфи лона инкапсуляцияро зиёд мекунад ва ба абстраксияи воқеӣ мусоидат мекунад. Фарқи байни синфҳои лонаҳои статикӣ ва ғайристатикӣ чӣ гуна аст? 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 мегузорам . Агар ягон нуктаи норавшан бошад, онро хонед. Акнун вакти халли як-ду масъала аст! :)
GO TO FULL VERSION