Као Ц++, Јава такође подржава конструктор копирања . Али у Ц++ креира се подразумевано. Док у Јави дефинишемо сопствени конструктор копирања. У овом одељку ћемо научити конструктор копирања у Јави са примером .
Цонструцтор
У Јави, а конструктор је исто што и метод, али једина разлика је у томе што конструктор има исто име као и име класе. Користи се за креирање инстанце класе. Позива се аутоматски када креирамо објекат класе. Нема тип повратка. Запамтите да конструктор не може бити апстрактан , коначни , синхронизовано , и статична . Не можемо надјачати конструктор. Заузима мало простора у меморији када се позове.
Типови конструктора
- Подразумевани конструктор
- Параметризовани конструктор
Осим горња два конструктора, Јава такође подржава конструктор копирања. Хајде да о томе детаљно разговарамо.
Зашто је потребан конструктор копирања?
Понекад се суочавамо са проблемом где је потребно да направимо тачну копију постојећег објекта класе. Такође постоји услов, ако смо направили било какве измене у копији то не треба да се одрази на оригиналу и обрнуто. За такве случајеве, Јава пружа концепт а конструктор копирања .
Цопи Цонструцтор
У Јави, конструктор копирања је посебан тип конструктора који креира објекат користећи други објекат исте Јава класе. Враћа дупликат постојећег објекта класе.
Можемо доделити вредност коначном пољу, али исто не можемо да урадимо док се користи метода цлоне(). Користи се ако желимо да направимо дубоку копију постојећег објекта. Лакша је за имплементацију у поређењу са методом цлоне().
Напомена: Подкласе га не могу наследити. Ако покушамо да иницијализујемо објекат подређене класе из референце надређене класе, суочићемо се са проблемом кастинга када га клонирамо помоћу конструктора копирања.
Употреба Конструктора копирања
Можемо користити конструктор копирања ако желимо:
- Направите копију објекта који има више поља.
- Направите дубоку копију тешких предмета.
- Избегавајте употребу методе Објецт.цлоне().
Предности Цопи Цонструцтор-а
- Ако је поље декларисано као коначно, конструктор копирања може да га промени.
- Нема потребе за куцањем.
- Његова употреба је лакша ако објекат има неколико поља.
- Додавање поља у класу је лако због тога. Морамо да променимо само у конструктору копирања.
Креирање конструктора копирања
Да бисте креирали конструктор копирања у Јави, следите доле наведене кораке:
- Креирајте конструктор који прихвата објекат исте класе као параметар.
public class Fruits { private double price; private String name; //copy constructor public Fruits(Fruits fruits) { //getters } }
- Копирајте сваки објекат поља (променљиву) у новокреирану инстанцу.
public class Fruits { private double price; private String name; //copy constructor public Fruits(Fruits fruits) { //copying each filed this.price = fruits.price; //getter this.name = fruits.name; //getter } }
Пример конструктора копирања
ЦопиЦонструцторЕкампле.јава
public class Fruit { private double fprice; private String fname; //constructor to initialize roll number and name of the student Fruit(double fPrice, String fName) { fprice = fPrice; fname = fName; } //creating a copy constructor Fruit(Fruit fruit) { System.out.println(' After invoking the Copy Constructor: '); fprice = fruit.fprice; fname = fruit.fname; } //creating a method that returns the price of the fruit double showPrice() { return fprice; } //creating a method that returns the name of the fruit String showName() { return fname; } //class to create student object and print roll number and name of the student public static void main(String args[]) { Fruit f1 = new Fruit(399, 'Ruby Roman Grapes'); System.out.println('Name of the first fruit: '+ f1.showName()); System.out.println('Price of the first fruit: '+ f1.showPrice()); //passing the parameters to the copy constructor Fruit f2 = new Fruit(f1); System.out.println('Name of the second fruit: '+ f2.showName()); System.out.println('Price of the second fruit: '+ f2.showPrice()); } }
Излаз:
Name of the first fruit: Ruby Roman Grapes Price of the first fruit: 399.0 After invoking the Copy Constructor: Name of the second fruit: Ruby Roman Grapes Price of the second fruit: 399.0
Конструктор копирања против методе цлоне().
И конструктор копирања и метода цлоне() се користе за креирање копије постојећег објекта класе. Али употреба конструктора копирања је лакша и боља у поређењу са методом цлоне() из разлога наведених у наставку:
- Ако користимо методу цлоне(), потребно је да увеземо Цлонеабле Метод може да избаци изузетак ЦлонеНотСуппортЕкцептион. Дакле, руковање изузетком у програму је сложен задатак. Док у конструктору копирања нема таквих сложености.
- Не можемо доделити вредност ако су поља коначни . Док у конструктору копирања можемо доделити вредности коначним пољима.
- Објекат који враћа метода цлоне() мора бити типецаст . Док у конструктору копирања не постоји такав захтев.