-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDeepCopyDemo.java
More file actions
67 lines (53 loc) · 1.43 KB
/
DeepCopyDemo.java
File metadata and controls
67 lines (53 loc) · 1.43 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package com.interview.all;
class Department implements Cloneable {
private String name;
public Department(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
protected Department clone() throws CloneNotSupportedException {
return (Department) super.clone(); // ✅ covariant return
}
}
class EmployeeDeep implements Cloneable {
private int id;
private String name;
private Department dept;
public EmployeeDeep(int id, String name, Department dept) {
this.id = id;
this.name = name;
this.dept = dept;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public Department getDept() {
return dept;
}
@Override
protected EmployeeDeep clone() throws CloneNotSupportedException {
EmployeeDeep cloned = (EmployeeDeep) super.clone();
cloned.dept = dept.clone(); // ✅ safe and clear
return cloned;
}
}
public class DeepCopyDemo {
public static void main(String[] args) throws CloneNotSupportedException {
Department dept = new Department("HR");
EmployeeDeep emp1 = new EmployeeDeep(101, "Alice", dept);
EmployeeDeep emp2 = emp1.clone(); // deep copy
// Change department name in cloned object
emp2.getDept().setName("Engineering");
System.out.println("emp1 dept: " + emp1.getDept().getName()); // HR
System.out.println("emp2 dept: " + emp2.getDept().getName()); // Engineering
}
}