2017-10-04 9 views
0

私は本当にclone()のオーバーライドを理解していません。私はクローンメソッドを呼び出すために親(オブジェクト)の参照を使用していません。また、どのようなオーバーライドの使用を説明してください。クローン()のオーバーライドが、浅いコピーまたは深いコピーのいずれかで必要な理由。同じ目的のためにメソッド(メソッド名)を書くことはできません。

シャローコピー

class Person implements Cloneable { 
    private String name; 

    protected Object copy() {//method name is copy 
     try { 
      return super.clone(); 
     } catch (CloneNotSupportedException e) { 
      e.printStackTrace(); 
      return null; 
     } 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

} 

public class TestClone { 

    public static void main(String[] args) { 
     Person ob1 = new Person(); 
     ob1.setName("Bibhu"); 
     Person ob2 = (Person) ob1.copy(); 
     System.out.println(ob1.getClass() == ob2.getClass());//true 
    } 

} 

ディープコピー

import java.util.ArrayList; 
import java.util.List; 

class Company { 
    private String name; 
    private List<String> empList = new ArrayList<>(); 

    public Company(String name, List<String> empList) { 
     this.name = name; 
     this.empList = empList; 
    } 

    public String getName() { 
     return name; 
    } 

    public List<String> getEmpList() { 
     return empList; 
    } 

    public Object copy() { 
     List<String> tempList = new ArrayList<>(); 
     for (String s : this.empList) { 
      tempList.add(s); 
     } 
     String cName = this.name; 
     return new Company(cName, tempList); 

    } 

} 

public class TestDeepClone { 

    public static void main(String[] args) { 
     List<String> empList = new ArrayList<>(); 
     empList.add("Bibhu"); 
     empList.add("Raj"); 
     empList.add("John"); 
     Company c1 = new Company("ABC Company", empList); 
     Company c2 = (Company) c1.copy(); 
     System.out.println(c1.getClass() == c2.getClass());//true 
     System.out.println(c1.getEmpList() == c2.getEmpList());//false 
    } 

} 

答えて

0

それはちょうど大会のためです。でもJavaDocでのサイス:慣例により

、このインタフェースを実装するクラスは、パブリックメソッドで(保護されています) Object.cloneをオーバーライドする必要があります。このメソッドのオーバーライドの詳細については、 Object.clone()を参照してください。

関連する問題