(十三).clone方法
1).clone方法沒有引數,而且返回主叫物件的一個副本。
Object類中的clone方法頭部如下:
public Object clone();
與從 Object類繼承的其他方法不一樣,clone方法需要重新定義,這樣才能如我們所期待的那樣使用。
如果一個類有一個拷貝拷貝構造方法,則可以通過呼叫拷貝構造方法定義clone方法返回一個主教物件的副本。
例如:
public Sale clone()
{
return new Sale (this);
}
這與官方定義的clone方法有所不同,但這樣定義確實能正確地工作。
2).clone方法較拷貝構造方法的優點
Java喜歡用clone方法替代拷貝構造方法,因為在一些情況下拷貝構造方法並不能實現期待的功能。
例如 :
分類使用clone方法和拷貝構造方法賦值一個類陣列會得到不同的結果
//A是B的基類,並且各自有clone方法和拷貝構造方法
public static Sale[] badcopy()
{
Sale[] b=new Sale[a.length];
for(int i=o;i<a.length;++i)
b[i]=new Sale(a[i]);
return b;
}
如果引數傳入的是B,則複製得到的陣列型別並不是B型別,而是A型別。
因為Sale拷貝構造方法只是簡單的進行復制。
而用clone方法卻能得到預期的結果:
public static Sale[] goodcopy(Sale[] a)
{
Sale[] b=new Sale[a.length];
for(int i=0;i<a.length;++i)
b[i]=a[i].clone();
return b;
}
這是由於後繫結,a[i].clone()總是表示正確版本的clone方法。
相關文章
- sourcetree github clone 報錯 hg clone fails with “repository not found“GithubAI
- WSL git cloneGit
- Oracle clone databaseOracleDatabase
- 1.3.2.1.2.3 Refreshable Clone PDBs
- SSH 方式 Git cloneGit
- Linux Clone函式Linux函式
- js2-cloneJS
- Java設計模式之(十三)——模板方法模式Java設計模式
- github clone 指定的tagGithub
- js deep clone 深克隆JS
- git clone倉儲問題Git
- Rust中的Copy和CloneRust
- git clone的使用小記Git
- jQuery原始碼解析之clone()jQuery原始碼
- Git clone 的小問題Git
- 運籌優化(十三)--大規模優化方法優化
- Vue原始碼學習(十三):實現watch(一):方法,物件Vue原始碼物件
- Github clone程式碼最快的方式Github
- MySQL 8 新特性之Clone PluginMySqlPlugin
- 使用映象配置為 Git Clone 加速Git
- git clone到指定的目錄Git
- Git clone 太慢了解一下 Mac Linux 設定代理和取消代理的方法GitMacLinux
- jQuery 練習:取出陣列字典的值, 靜態對話方塊, clone方法應用jQuery陣列
- git clone 慢並且會中斷Git
- MySQL的clone(克隆)要注意的點MySql
- gitlab如何實現批次clone倉庫Gitlab
- git clone失敗問題解決Git
- clone 淺克隆帶來的問題
- rust-quiz:030-clone-pointers.rsRustUI
- gitlab Clone Pull Push 日誌資訊Gitlab
- [20181010]12c clone pdb.txt
- SpringBoot非官方教程 | 第二十三篇: 非同步方法Spring Boot非同步
- 那些日子 十三
- Idea clone 專案推送到自有倉庫Idea
- git clone失敗,超時,速度慢Git
- mac磁碟克隆備份工具:Clone X for macMac
- 使用Git命令列clone一個專案Git命令列
- JAVA 基礎 – clone淺克隆與深克隆Java