logo

Eksempel på Java Copy Constructor

Ligesom C++, Java understøtter også kopi konstruktør . Men i C++ den oprettes som standard. Mens vi i Java definerer vores egen kopikonstruktør. I dette afsnit lærer vi kopi konstruktør i Java med et eksempel .

Konstruktør

I Java, en konstruktør er det samme som en metode, men den eneste forskel er, at konstruktøren har samme navn som klassenavnet. Det bruges til at oprette en forekomst af klassen. Det kaldes automatisk, når vi opretter et objekt i klassen. Den har ingen returtype. Husk, at en konstruktør ikke kan være det abstrakt , endelig , synkroniseret , og statisk . Vi kan ikke tilsidesætte en konstruktør. Den fylder noget i hukommelsen, når den kaldes.

java hvis andet

Typer af konstruktør

  • Standard konstruktør
  • Parametriseret konstruktør

Bortset fra de to ovenstående konstruktører, understøtter Java også kopikonstruktøren. Lad os diskutere det i detaljer.

Hvorfor kræves kopikonstruktør?

Nogle gange står vi over for et problem, hvor vi skal lave en nøjagtig kopi af et eksisterende objekt i klassen. Der er også en betingelse, hvis vi har foretaget ændringer i kopien, skal det ikke afspejles i den originale og omvendt. For sådanne tilfælde giver Java begrebet en kopi konstruktør .

Kopi konstruktør

I Java er en kopikonstruktør en speciel type konstruktør, der opretter et objekt ved hjælp af et andet objekt af samme Java-klasse. Det returnerer en dublet kopi af et eksisterende objekt i klassen.

Vi kan tildele en værdi til det endelige felt, men det samme kan ikke gøres, mens du bruger clone()-metoden. Det bruges, hvis vi vil lave en dyb kopi af et eksisterende objekt. Det er nemmere at implementere sammenlignet med clone()-metoden.

Bemærk: Det kan ikke nedarves af underklasserne. Hvis vi forsøger at initialisere et underordnet klasseobjekt fra en overordnet klassereference, står vi over for casting-problemet, når vi kloner det med kopikonstruktøren.

Brug af Copy Constructor

Vi kan bruge kopikonstruktøren, hvis vi vil:

  • Opret en kopi af et objekt, der har flere felter.
  • Generer en dyb kopi af de tunge genstande.
  • Undgå brugen af ​​Object.clone() metoden.

Fordele ved Copy Constructor

  • Hvis et felt erklæres som endeligt, kan kopikonstruktøren ændre det.
  • Der er ikke behov for typecasting.
  • Det er nemmere at bruge, hvis et objekt har flere felter.
  • Tilføjelse af felt til klassen er let på grund af det. Vi skal kun ændre i kopikonstruktøren.

Oprettelse af en kopikonstruktør

Følg nedenstående trin for at oprette en kopikonstruktør i Java:

  • Opret en konstruktør, der accepterer et objekt af samme klasse som en parameter.
 public class Fruits { private double price; private String name; //copy constructor public Fruits(Fruits fruits) { //getters } } 
  • Kopier hvert felt (variabelt) objekt til den nyoprettede instans.
 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 } } 

Eksempel på Copy Constructor

CopyConstructorExample.java

lokal dato
 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 

Kopier Constructor vs clone()-metoden

Både kopi-konstruktøren og clone()-metoden bruges til at oprette en kopi af et eksisterende objekt i klassen. Men brugen af ​​kopikonstruktør er nemmere og bedre sammenlignet med clone()-metoden på grund af årsagerne nedenfor:

  • Hvis vi bruger metoden clone() er det nødvendigt at importere Kan klones Metoden kan give undtagelsen CloneNotSupportException. Så håndtering af undtagelsen i et program er en kompleks opgave. Mens du er i kopikonstruktør, er der ingen sådanne kompleksiteter.
  • Vi kan ikke tildele en værdi, hvis felterne er endelig . Mens vi er i kopikonstruktøren, kan vi tildele værdier til de sidste felter.
  • Objektet, der returneres af metoden clone() skal være typecast . Mens du er i kopikonstruktør, er der ikke noget sådant krav.