При обектно-ориентираното програмиране конструкторът е специална функция, която извиквате, за да създадете обект. Конструкторите имат няколко уникални функции, които им позволяват да работят.

В Java вие давате име на конструктор след неговия клас. Конструкторът е метод, дефиниран в класа, за който се прилага. Java конструкторите могат да използват претоварване, за да осигурят алтернативно поведение. Конструкторите в Java също могат да използват наследството, за да използват повторно кода.

Защо все пак имате нужда от конструктори?

Конструкторите са опора на обектно-ориентирано програмиранеи Java не е изключение. Този пример показва как можете да дефинирате основен клас Circle с едно свойство за данни и един метод:

обществен клас Circle {
публичен двоен радиус;
публична двойна зона () {връщане 3.14159 * радиус * радиус; }
}

След това можете да създадете екземпляр на този клас и да взаимодействате с него:

Кръг c = нов кръг ();
в. радиус = 2;
System.out.println (c.area ()); // 12.56636

Но това е по-малко удобно и стабилно, отколкото би могло да бъде. Добра обектно-ориентирана практика е да капсулирате данни, като ги предпазвате от неоторизиран достъп:

instagram viewer

обществен клас Circle {
частни двоен радиус;
публична двойна зона () {връщане 3.14159 * радиус * радиус; }
public void setRadius (double r) {радиус = r; }
}

Сега повикващият код може да използва setRadius метод и не трябва да се притеснявате за подробностите за неговото изпълнение:

Кръг c = нов кръг ();
c.setRadius (2);

Конструкторите предлагат още по-добър начин за предоставяне на данни на обект, когато го създавате. Те много често се използват за инициализация на свойства, като например радиус тук.

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

Най-основният конструктор е този без аргументи, който не прави нищо:

обществен клас Circle {
обществен кръг () {}
}

Вижте също: Научете как да създавате класове в Java

Ако не дефинирате конструктор, Java ще предостави такъв по подразбиране, който се държи по същия начин.

Обърнете внимание на няколко неща:

  1. Името на конструктора съвпада с името на класа.
  2. Този конструктор използва публично модификатор на достъп, така че всеки друг код може да го извика.
  3. Конструктор не включва тип връщане. За разлика от други методи, конструкторите не могат да върнат стойност.

Конструкторите обикновено извършват някакъв вид инициализация. Имайте предвид, че горният код не инициализира стойността на радиус. В този случай езикът автоматично ще го настрои на нула. Този клас очаква потребителят да използва setRadius (). За да използвате по-полезно по подразбиране от 0, можете да го присвоите в конструктора:

обществен клас Circle {
публичен кръг () {радиус = 1; }
}

Кръговете, създадени с този клас, поне сега ще имат действителна площ! Повикващият все още може да използва setRadius () да осигури радиус, различен от 1. Но конструкторът може да бъде още по-приятелски:

обществен клас Circle {
публичен кръг (двойно r) {радиус = r; }
}

Сега можете да създавате кръгове с определен радиус още от раждането:

Кръг c = нов кръг (2);
System.out.println (c.area ()); // 12.56636

Това е много често приложение за конструктори. Често ще ги използвате за инициализиране на променливи към стойности на параметри.

Претоварване на конструктора

Можете да посочите повече от един конструктор в дефиниция на клас:

публичен кръг () {радиус = 1; }
публичен кръг (двойно r) {радиус = r; }

Това дава на извикващия код избор как да се конструират обекти:

Кръг c1 = нов кръг (2);
Кръг c2 = нов кръг ();
System.out.println (c1.area () + "," + c2.area ()); // 12.56636, 3.14159

С малко по-сложен кръг можете да изследвате по-интересни конструктори. Тази версия съхранява позицията си:

обществен клас Circle {
публичен дубъл x, y, радиус;
публичен кръг () {радиус = r; }
публичен кръг (двойно r) {радиус = r; }
публичен кръг (двоен x, двоен y, двоен r) {
това.x = x; this.y = y; радиус = r;
}

публична двойна зона () {връщане 3.14159 * радиус * радиус; }
}

Вече можете да създадете кръг без аргументи, единичен радиус или координати x и y заедно с радиуса. Това е същия вид претоварване, което Java поддържа за всеки метод.

Конструктор верига

Какво ще кажете за създаването на един кръг, базиран на друг? Това би ни дало възможност за лесно копиране на кръгове. Спазвайте следния блок:

обществен кръг (кръг в) {
това.x = c.x;
this.y = c.y;
this.radius = c.radius;
}

Това ще работи, но повтаря ненужно някакъв код. Тъй като класът Circle вече има конструктор, който обработва отделните свойства, вместо това можете да го извикате с помощта на това ключова дума:

обществен кръг (кръг в) {
това (c.x, c.y, c.radius);
}

Това е една форма на свързване на конструктори, извикващо един конструктор от друг. Той използва по-малко код и помага да се централизира операцията, вместо да се дублира.

Извикване на родителския конструктор

Другата форма на свързване на конструктор възниква, когато конструктор извика конструктор на своя родителски клас. Това може да бъде или изрично, или неявно. За да извикате изрично конструктор родител, използвайте супер ключова дума:

супер (x, y);

Представете си клас Shape, който действа като родител на Кръга:

публична класа Форма {
двойно x, y;
публична форма (double _x, double _y) {x = _x; y = _y; }
}

Той се справя с общо позициониране за всички форми, тъй като това е функционалност, която всички те споделят. Сега класът Circle може да делегира обработката на позицията на своя родител:

обществен клас Кръг разширява Shape {
двоен радиус;
публичен кръг (двойно r) {супер (0, 0); радиус = r; }
публичен кръг (двоен x, двоен y, двоен r) {
супер (x, y);
радиус = r;
}
}

Изграждането на суперклас е много важен аспект на наследяване в Java. Езикът го прилага по подразбиране, ако не се обадите изрично супер във вашите конструктори.

Модификатори на достъп на конструктори

Конструкторите могат да включват модификатор за достъп в своя подпис. Подобно на други методи, това определя кои типове повикващи могат да имат достъп до конструктора:

тест за публичен клас {
частен статичен тест uniqueInstance = нов тест ();
частен тест () {}
публичен статичен тест getInstance () {
връщане uniqueInstance;
}
}

Това е по-сложен пример, така че внимавайте да го разберете:

  • Класът не е абстрактен, така че е възможно да се направи екземпляр от него.
  • Конструкторът е частен, така че само този клас може да създаде нов екземпляр.
  • Чрез статично свойство и метод класът излага един-единствен уникален екземпляр от себе си на повикващите.

Използвайте конструктори в Java за създаване на обекти

Конструкторите са жизненоважни за обектно-ориентираното програмиране. Те ви позволяват да създавате обекти, което е от съществено значение!

В Java конструкторите приличат на други методи и работят почти по същия начин. Трябва да запомните специалните правила около конструкторите по подразбиране, претоварването и веригата на конструктори. Ако конструкторите са нови за вас, може да искате да прочетете другите основни Java концепции, които трябва да научите, когато започнете.

електронна поща
10 основни концепции за Java, които трябва да научите, когато започнете

Независимо дали пишете графичен интерфейс, разработвате софтуер от страна на сървъра или мобилно приложение, използващо Android, изучаването на Java ще ви послужи добре. Ето някои основни концепции за Java, които ще ви помогнат да започнете.

Прочетете Напред

Свързани теми
  • Програмиране
  • Java
  • Съвети за кодиране
За автора
Боби Джак (51 статии публикувани)

Боби е технологичен ентусиаст, който работи като разработчик на софтуер в продължение на почти две десетилетия. Той е запален по игрите, работи като редактор на рецензии в списание Switch Player и е потопен във всички аспекти на онлайн публикуването и уеб разработката.

Още от Боби Джак

Абонирайте се за нашия бюлетин

Присъединете се към нашия бюлетин за технически съвети, рецензии, безплатни електронни книги и ексклузивни оферти!

Още една стъпка…!

Моля, потвърдете имейл адреса си в имейла, който току-що ви изпратихме.

.