C++ gibi, Java aynı zamanda destekliyor kopya oluşturucu . Ama içinde C++ varsayılan olarak oluşturulur. Java'dayken kopya kurucuyu kendimiz tanımlarız. Bu bölümde şunları öğreneceğiz: Java'daki yapıcıyı bir örnekle kopyalayın .
Oluşturucu
Java'da bir yapıcı yöntemle aynıdır ancak tek fark yapıcının sınıf adıyla aynı ada sahip olmasıdır. Sınıfın bir örneğini oluşturmak için kullanılır. Sınıfın bir nesnesini oluşturduğumuzda otomatik olarak çağrılır. Dönüş türü yoktur. Bir yapıcının olamayacağını unutmayın soyut , son , senkronize , Ve statik . Bir kurucuyu geçersiz kılamayız. Çağrıldığında hafızada bir miktar yer kaplar.
kurt tilkiye karşı
Yapıcı Türleri
- Varsayılan Yapıcı
- Parametreli Oluşturucu
Yukarıdaki iki kurucunun dışında Java, kopya kurucuyu da destekler. Bunu ayrıntılı olarak tartışalım.
Kopya oluşturucu neden gerekli?
Bazen sınıfın mevcut bir nesnesinin tam bir kopyasını oluşturmamız gereken bir sorunla karşılaşırız. Ayrıca bir koşul da var; kopyada herhangi bir değişiklik yaptıysak, bunun orijinal kopyaya yansımaması veya bunun tersi. Bu gibi durumlar için Java bir kavram sağlar. kopya oluşturucu .
Oluşturucuyu Kopyala
Java'da kopya yapıcı, aynı Java sınıfındaki başka bir nesneyi kullanarak bir nesne oluşturan özel bir yapıcı türüdür. Sınıfın mevcut bir nesnesinin kopya bir kopyasını döndürür.
Son alana bir değer atayabiliriz ancak clone() yöntemini kullanırken aynı şey yapılamaz. Mevcut bir nesnenin derin bir kopyasını oluşturmak istiyorsak kullanılır. clone() yöntemiyle karşılaştırıldığında uygulanması daha kolaydır.
Not: Alt sınıflar tarafından miras alınamaz. Bir alt sınıf nesnesini bir üst sınıf referansından başlatmaya çalışırsak, onu kopya yapıcısı ile klonlarken atama sorunuyla karşılaşırız.
Kopya Oluşturucunun Kullanımı
Aşağıdakileri yapmak istersek kopya yapıcısını kullanabiliriz:
- Birden çok alanı olan bir nesnenin kopyasını oluşturun.
- Ağır nesnelerin derin bir kopyasını oluşturun.
- Object.clone() yöntemini kullanmaktan kaçının.
Kopya Oluşturucunun Avantajları
- Bir alan final olarak bildirilmişse kopya kurucusu bunu değiştirebilir.
- Tiplemeye gerek yoktur.
- Bir nesnenin birden fazla alanı varsa kullanımı daha kolaydır.
- Bu nedenle sınıfa alan eklemek kolaydır. Yalnızca kopya yapıcısında değişiklik yapmamız gerekiyor.
Kopya Oluşturucu Oluşturma
Java'da bir kopya oluşturucu oluşturmak için aşağıdaki adımları izleyin:
- Aynı sınıftan bir nesneyi parametre olarak kabul eden bir yapıcı oluşturun.
public class Fruits { private double price; private String name; //copy constructor public Fruits(Fruits fruits) { //getters } }
- Her alan (değişken) nesnesini yeni oluşturulan örneğe kopyalayın.
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 } }
Kopya Oluşturucu Örneği
CopyConstructorExample.java
udp protokolü
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()); } }
Çıktı:
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
Yapıcı Vs clone() Yöntemini Kopyala
Sınıfın mevcut bir nesnesinin bir kopyasını oluşturmak için hem copy yapıcısı hem de clone() yöntemi kullanılır. Ancak aşağıda verilen nedenlerden dolayı kopya yapıcının kullanımı clone() yöntemine kıyasla daha kolay ve daha iyidir:
- clone() yöntemini kullanıyorsak, içe aktarmamız gerekir. Klonlanabilir Yöntem istisnayı atabilir CloneNotSupportException. Bu nedenle, bir programdaki istisnayı ele almak karmaşık bir iştir. Kopya oluşturucuda böyle bir karmaşıklık yoktur.
- Alanlar şu şekildeyse bir değer atayamayız: son . Kopya yapıcısındayken son alanlara değerler atayabiliriz.
- clone() yönteminin döndürdüğü nesne şu şekilde olmalıdır: daktilo . Kopya yapıcıda böyle bir gereklilik yoktur.