logo

Exempel på Java Copy Constructor

Som C++, Java stöder också kopia konstruktör . Men i C++ den skapas som standard. Medan vi i Java definierar copy constructor vår egen. I det här avsnittet kommer vi att lära oss kopiera konstruktor i Java med ett exempel .

Konstruktör

I Java, a konstruktör är samma som en metod men den enda skillnaden är att konstruktorn har samma namn som klassnamnet. Den används för att skapa en instans av klassen. Det anropas automatiskt när vi skapar ett objekt i klassen. Den har ingen returtyp. Kom ihåg att en konstruktör inte kan vara det abstrakt , slutlig , synkroniserad , och statisk . Vi kan inte åsidosätta en konstruktör. Den tar upp lite utrymme i minnet när den anropas.

Typer av konstruktörer

  • Standardkonstruktör
  • Parameteriserad konstruktör

Förutom de två ovanstående konstruktörerna, stöder Java även kopieringskonstruktorn. Låt oss diskutera det i detalj.

Varför krävs kopieringskonstruktör?

Ibland står vi inför ett problem där vi måste skapa en exakt kopia av ett befintligt objekt i klassen. Det finns också ett villkor, om vi har gjort några ändringar i kopian ska det inte återspeglas i originalet och vice versa. För sådana fall tillhandahåller Java begreppet en kopia konstruktör .

Kopiera konstruktör

I Java är en kopieringskonstruktor en speciell typ av konstruktor som skapar ett objekt med ett annat objekt av samma Java-klass. Den returnerar en dubblettkopia av ett befintligt objekt i klassen.

Vi kan tilldela ett värde till det sista fältet men detsamma kan inte göras när du använder metoden clone(). Det används om vi vill skapa en djup kopia av ett befintligt objekt. Det är lättare att implementera jämfört med metoden clone().

Obs: Det kan inte ärvas av underklasserna. Om vi ​​försöker initiera ett underordnat klassobjekt från en överordnad klassreferens, möter vi castingsproblemet när vi klonar det med kopieringskonstruktorn.

Användning av Copy Constructor

Vi kan använda kopieringskonstruktorn om vi vill:

  • Skapa en kopia av ett objekt som har flera fält.
  • Skapa en djup kopia av de tunga föremålen.
  • Undvik användningen av Object.clone()-metoden.

Fördelar med Copy Constructor

  • Om ett fält förklaras som slutgiltigt kan kopieringskonstruktören ändra det.
  • Det finns inget behov av typcasting.
  • Användningen är lättare om ett objekt har flera fält.
  • Det är lätt att lägga till fält i klassen. Vi behöver bara ändra i kopieringskonstruktorn.

Skapa en Copy Constructor

För att skapa en kopieringskonstruktor i Java, följ stegen nedan:

  • Skapa en konstruktor som accepterar ett objekt av samma klass som en parameter.
 public class Fruits { private double price; private String name; //copy constructor public Fruits(Fruits fruits) { //getters } } 
  • Kopiera varje fältobjekt (variabel) till den nyskapade instansen.
 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 } } 

Exempel på Copy Constructor

CopyConstructorExample.java

 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()); } } 

Produktion:

 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 

Kopiera Constructor vs clone()-metoden

Både copy-konstruktorn och clone()-metoden används för att skapa en kopia av ett befintligt objekt i klassen. Men användningen av copy constructor är enklare och bättre i jämförelse med clone()-metoden på grund av skälen nedan:

  • Om vi ​​använder metoden clone() är det nödvändigt att importera Klonbar Metoden kan orsaka undantag CloneNotSupportException. Så att hantera undantaget i ett program är en komplex uppgift. Medan i copy constructor finns det inga sådana komplexiteter.
  • Vi kan inte tilldela ett värde om fälten är det slutlig . Medan vi är i kopieringskonstruktorn kan vi tilldela värden till de sista fälten.
  • Objektet som returneras av metoden clone() måste vara typcast . Medan i copy constructor finns det inget sådant krav.