簡體   English   中英

使用Java中的默認構造函數復制構造函數

[英]Copy Constructor with Default Constructor in Java

我需要在類中有一個復制構造函數,因為我需要創建重復的對象。 我相信,如果我將創建副本構造函數,那么我也必須指定非參數化的構造函數,因為Java將不再提供默認的構造函數。

我不想觸摸默認構造函數,因為這是我在各處代碼中使用的構造函數。 是否有一種解決方法,可以在沒有定義基本構造函數的情況下使用復制構造函數或類似的東西。

不,如果要同時具有無參數構造函數具有參數的構造函數,則需要同時聲明它們。 聲明無參數構造函數非常容易:

public YourClassName() {
}

super(); 是隱式的。

盡管它不一定具有與默認構造函數相同的訪問權限,但其行為與默認構造函數的行為完全相同。 (當然,您可以根據需要將其從public更改。)從JLS第8.8.9節中

如果一個類不包含構造函數聲明,則隱式聲明一個沒有形式參數且沒有throws子句的默認構造函數。

如果要聲明的類是原始類Object,則默認構造函數的主體為空。 否則,默認構造函數將簡單地調用不帶參數的超類構造函數。

如果隱式聲明了默認構造函數,但超類沒有可訪問的構造函數(第6.6節),該構造函數不帶參數且不包含throws子句,則這是編譯時錯誤。

在類類型中,如果將該類聲明為public,則默認構造函數被隱式賦予訪問修飾符public(第6.6節); 如果該類被聲明為受保護的,則默認構造函數被隱式賦予訪問修飾符保護(第6.6節); 如果該類被聲明為私有,則默認構造函數被隱式賦予訪問修飾符私有(第6.6節); 否則,默認構造函數具有無訪問修飾符暗含的默認訪問權限。

如果您確實不想編寫默認的構造函數,則可以執行以下操作:

public static MyClass create(MyClass original) {
    // return the new instance
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM