Шта је конструктор у Јави и како га користите?

Шта је конструктор у Јави и како га користите?

У објектно оријентисаном програмирању, конструктор је посебна функција коју позивате за креирање објекта. Конструктори имају неколико јединствених карактеристика које им омогућавају рад.





У Јави конструктор именујете према његовој класи. Конструктор је метода, дефинисана у класи на коју се односи. Јава конструктори могу користити преоптерећење да би обезбедили алтернативно понашање. Конструктори у Јави такође могу користити наслеђивање за поновну употребу кода.





Зашто су вам уопште потребни конструктори?

Конструктори су ослонац објектно оријентисаног програмирања и Јава није изузетак. Овај пример показује како можете дефинисати основну класу Цирцле са једним својством података и једним методом:





public class Circle {
public double radius;
public double area() { return 3.14159 * radius * radius; }
}

Затим можете креирати инстанцу ове класе и ступити у интеракцију са њом:

Circle c = new Circle();
c.radius = 2;
System.out.println(c.area()); // 12.56636

Али ово је мање згодно и робусно него што би могло бити. Добра је објектно оријентисана пракса да инкапсулирате податке штитећи их од неовлашћеног приступа:



public class Circle {
private double radius;
public double area() { return 3.14159 * radius * radius; }
public void setRadius(double r) { radius = r; }
}

Сада позивни код може да користи сетРадиус метод и не морате бринути о детаљима његове имплементације:

како поправити заглављени иПхоне на Аппле логотипу
Circle c = new Circle();
c.setRadius(2);

Конструктори нуде још бољи начин испоруке података објекту када га креирате. Врло често се користе за иницијализацију својстава, као што је радијус овде.





Примери једноставних конструктора

Најосновнији конструктор је онај без аргумената, који не ради ништа:

public class Circle {
public Circle() {}
}

Такође видети: Научите како да креирате класе у Јави





Ако не дефинишете конструктор, Јава ће обезбедити подразумевани који се понаша на исти начин.

Обратите пажњу на неколико ствари:

  1. Име конструктора одговара имену класе.
  2. Овај конструктор користи јавности модификатор приступа, па га може позвати било који други код.
  3. Конструктор не укључује повратни тип. За разлику од других метода, конструктори не могу вратити вредност.

Конструктори обично изводе неку врсту иницијализације. Имајте на уму да горњи код не иницијализује вредност радијуса. У овом случају језик ће га аутоматски поставити на нулу. Ова класа очекује да ће је корисник користити сетРадиус () . Да бисте користили кориснију подразумевану вредност од 0, можете је доделити унутар конструктора:

public class Circle {
public Circle() { radius = 1; }
}

Кругови направљени овом класом сада ће имати стварну површину! Позивалац и даље може да користи сетРадиус () да обезбеди радијус различит од 1. Али конструктор може бити још пријатељскији:

public class Circle {
public Circle(double r) { radius = r; }
}

Сада можете да креирате кругове са одређеним радијусом од рођења:

како да ваш рачунар буде хладан
Circle c = new Circle(2);
System.out.println(c.area()); // 12.56636

Ово је врло честа употреба за конструкторе. Често ћете их користити за иницијализацију променљивих на вредности параметара.

Преоптерећење конструктора

У дефиницији класе можете навести више конструктора:

public Circle() { radius = 1; }
public Circle(double r) { radius = r; }

Ово даје позивном коду избор начина конструисања објеката:

Circle c1 = new Circle(2);
Circle c2 = new Circle();
System.out.println(c1.area() + ', ' + c2.area()); // 12.56636, 3.14159

Уз мало сложенији круг, можете истражити занимљивије конструкторе. Ова верзија чува свој положај:

public class Circle {
public double x, y, radius;
public Circle() { radius = r; }
public Circle(double r) { radius = r; }
public Circle(double x, double y, double r) {
this.x = x; this.y = y; radius = r;
}

public double area() { return 3.14159 * radius * radius; }
}

Сада можете креирати круг без аргумената, једног радијуса или к и и координата поред радијуса. Ово је иста врста преоптерећења коју Јава подржава за било коју методу.

Конструктор Ланчање

Како би било да направите један круг, заснован на другом? То би нам дало могућност лаког копирања Кругова. Обратите пажњу на следећи блок:

public Circle(Circle c) {
this.x = c.x;
this.y = c.y;
this.radius = c.radius;
}

Ово ће успети, али непотребно понавља неки код. Пошто класа Цирцле већ има конструктор који обрађује појединачна својства, уместо тога можете то назвати помоћу ово кључна реч:

public Circle(Circle c) {
this(c.x, c.y, c.radius);
}

Ово је један облик ланчаног конструктора који позива један конструктор из другог. Користи мање кода и помаже у централизовању операције уместо да је дуплира.

Позивање родитељског конструктора

Други облик ланчавања конструктора јавља се када конструктор позове конструктор своје родитељске класе. Ово може бити експлицитно или имплицитно. Да бисте изричито позвали родитељски конструктор, користите супер кључна реч:

super(x, y);

Замислите класу Схапе која се понаша као родитељ Круга:

public class Shape {
double x, y;
public Shape(double _x, double _y) { x = _x; y = _y; }
}

Рукује заједничким позиционирањем за све облике јер је то функција коју сви деле. Сада класа Цирцле може делегирати руковање позицијом свом родитељу:

public class Circle extends Shape {
double radius;
public Circle(double r) { super(0, 0); radius = r; }
public Circle(double x, double y, double r) {
super(x, y);
radius = r;
}
}

Изградња суперкласе је веома важан аспект наслеђивање у Јави . Језик га подразумевано примењује ако не позовете изричито супер у вашим конструкторима.

Приступите модификаторима на конструкторима

Конструктори могу укључити модификатор приступа у свој потпис. Као и друге методе, ово дефинише које врсте позиваоца могу приступити конструктору:

public class Test {
private static Test uniqueInstance = new Test();
private Test() { }
public static Test getInstance() {
return uniqueInstance;
}
}

Ово је компликованији пример, па пазите да га разумете:

  • Класа није апстрактна, па је могуће из ње направити инстанцу.
  • Конструктор је приватан па само ова класа може створити нову инстанцу.
  • Путем статичког својства и методе, класа излаже једну, јединствену инстанцу позиваоцима.

Користите Конструкторе у Јави за креирање објеката

Конструктори су од виталног значаја за објектно оријентисано програмирање. Они вам омогућавају да креирате објекте, што је неопходно!

У Јави конструктори изгледају као друге методе и раде на приближно исти начин. Треба запамтити посебна правила у вези са подразумеваним конструкторима, преоптерећењем и ланчавањем конструктора. Ако су вам конструктори тек почели, можда бисте желели да прочитате друге основне Јава концепте које бисте требали научити при покретању.

Објави Објави Твеет Емаил 10 основних Јава концепата које бисте требали научити на почетку

Било да пишете графички интерфејс, развијате софтвер на страни сервера или мобилну апликацију користећи Андроид, учење Јава ће вам добро послужити. Ево неколико основних Јава концепата који ће вам помоћи да започнете.

Прочитајте следеће
Повезане теме
  • Програмирање
  • Јава
  • Савети за кодирање
О аутору Бобби Јацк(Објављено 58 чланака)

Бобби је ентузијаст технологије који је скоро две деценије радио као програмер софтвера. Одушевљен је играњем игара, ради као уредник рецензија у магазину Свитцх Плаиер, и уроњен је у све аспекте издаваштва на мрежи и веб развоја.

како избрисати недавно гледане на нетфлику
Више од Боббија Јацка

Претплатите се на наш билтен

Придружите се нашем билтену за техничке савете, критике, бесплатне е -књиге и ексклузивне понуде!

Кликните овде да бисте се претплатили