Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class CopyConstructorDemo {
- public static void main(String[] args) {
- Teacher teacher = new Teacher("Kripalu");
- Student sOrg = new Student(15007, "Amit", "Chirimiri", teacher);
- //Student sClo = sOrg; //Java Reference
- //Student sClo = (Student) sOrg.clone(); //CLONE
- Student sClo = new Student(sOrg); //COPY CONSTRUCTOR
- sOrg.display();
- sClo.getTeacher().setName("ShriKrishn");
- sOrg.display();
- }
- }
- class Teacher implements Cloneable{
- String _name = "";
- Teacher(String name){
- this.setName(name);
- }
- String getName(){return _name;}
- void setName(String name){_name = name;}
- //For Deep copy
- //@Override
- protected Object clone(){
- try {
- return super.clone();
- } catch (CloneNotSupportedException e) {
- e.printStackTrace();
- return null;
- }
- }
- }
- class Student implements Cloneable{
- int _rollNo;
- String _name;
- String _address;
- Teacher _teacher;
- Student(int rollNo, String name, String address, Teacher teacher){
- this.setRollNo(rollNo);
- this.setName(name);
- this.setAddress(address);
- _teacher = teacher;
- }
- Student(Student copyCons){
- this._rollNo = copyCons._rollNo;
- this._name = copyCons._name;
- this._address = copyCons._address;
- this._teacher = copyCons._teacher;
- }
- Teacher getTeacher(){return _teacher;}
- void setTeacher(Teacher teacher){_teacher = teacher;}
- int getRollNo(){return _rollNo;}
- String getName(){return _name;}
- String getAddress(){return _address;}
- void setRollNo(int rollNo){_rollNo = rollNo;}
- void setName(String name){_name = name;}
- void setAddress(String address){_address = address;}
- void display(){
- System.out.println(_rollNo+" "+
- _name+" "+
- _address+" "+
- _teacher.getName());
- }
- @Override
- protected Object clone(){
- try {
- //return super.clone(); //For Shallow copy
- //For Deep copy
- Student cloned = (Student)super.clone();
- cloned.setTeacher((Teacher)cloned.getTeacher().clone());
- return cloned;
- } catch (CloneNotSupportedException e) {
- e.printStackTrace();
- return null;
- }
- }
- }
- Student(Student copyCons){
- this._rollNo = copyCons._rollNo;
- this._name = copyCons._name;
- this._address = copyCons._address;
- this._teacher = (Teacher) copyCons._teacher.clone(); //FIX: thanks to Amir
- }
- //Copy constructor for the student
- Student(Student copyCons){
- this._rollNo = copyCons._rollNo;
- this._name = copyCons._name;
- this._address = copyCons._address;
- this._teacher = copyCons._teacher.clone();
- }
- //Clone for the student
- protected Student clone(){
- return new Student(this);
- }
- //This is the copy constructor
- Teacher(Teacher t){
- setName(t.getName());
- }
- //That's how you clone an object of type teacher
- protected Teacher clone(){
- return new Teacher(this);
- }
- Teacher t1 = new teacher("Teacher 1");
- Teacher t1Clone = t1.clone();
- Student s1 = new Student(15007, "Amit", "Chirimiri", t1);
- Student s1Clone = s1.clone();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement