Cloning: Cloning means creating duplicate copy with current object state is
called cloning.
Requirement: If we create objects with new keyword and
constructor always objects are created with default initial state. If we want
to create second object with first object current modified state, we must used
cloning.
For Example consider below example;:
Consider a bikes manufacturing factory, here
all bikes has same state except few properties like engine number,
model number etc.
To develop this factory
application it is recommended to use cloning approach. because once we create
object, in all other objects we need to change only the specific properties.
To perform cloning we must use
Object's class clone Method.
Rule:
To clone an object, its class must be subclass of
java.lang.Cloneable interface. It is a marker interface. It means only
Cloneable objects are cloned by JVM . If object is not of
type Cloneable JVM throws exception
java.lang.CloneNotSupprotedEception. Below application shows performing
cloning.
//Factory.java
class Bike implements Cloneable{
int bikeNumber;
int engineNumber;
int modelNumber;
String type;
Bike(int bikeNumber; int engineNumber; int
modelNumber; String type;){
this.engineNumber=engineNumber;
this.modelNumber=modelNumber;
this.type=type;
}
public Object clone() throws CloneNotSupportedException
{
//current bike object is cloned
Bike b1=(Bike)super.clone();
//changing individual property
b1.engineNumber= b1.engineNumber+10;
//returning cloned bike
return b1;
}}
class factory
{
public static void main(String[] args) throws
CloneNotSupportedException{
Bike b1= new
Bike(4221,5673,"Pulsar 180cc");
//cloning first bike object
Bike b2=(Bike)b1.clone();
//clone method create new object , so == returns false
System.out.println(b1==b2);
System.out.println("b1 object
state");
System.out.println("b1.engineNumber:"+b1.engineNumber);
System.out.println("b1.modelNumber:"+b1.modelNumber);
System.out.println("b1.type:"+b1.type);
System.out.println();
System.out.println("b2 object state");
System.out.println("b2.engineNumber:"+b2.engineNumber);
System.out.println("b2.modelNumber:"+b2.modelNumber);
System.out.println("b2.type:"+b2.type);
}}
No comments:
Post a Comment