Using  Objects as Parameters
So far we  have only been using simple types as parameters to methods. However, it is both  correct and common to pass objects to methods. 
For  example, consider the following short program:
// Objects  may be passed to methods.
class Test  {
int a,  b;
Test(int  i, int j) {
a =  i;
b =  j;
}
// return  true if o is equal to the invoking object
boolean  equals(Test o) {
if(o.a ==  a && o.b == b) return true;
else  return false;
}
}
class  PassOb {
public  static void main(String args[]) {
162   
Test ob1 =  new Test(100, 22);
Test ob2 =  new Test(100, 22);
Test ob3 =  new Test(-1, -1);
System.out.println("ob1  == ob2: " + ob1.equals(ob2));
System.out.println("ob1  == ob3: " + ob1.equals(ob3));
}
}
This  program generates the following output:
ob1 ==  ob2: true
ob1 ==  ob3: false
As you can  see, the equals( ) method inside Test compares two objects for  equality and returns the result. That is, it compares the invoking object with  the one that it is passed. If they contain the same values, then the method  returns true. Otherwise, it returns false. Notice that the  parameter o in equals( ) specifies Test as its type.  Although Test is a class type created by the program, it is used in just  the same way as Java's built-in types.
One of the  most common uses of object parameters involves constructors. Frequently  you will want to construct a new object so that it is initially the same as  some  existing object. To do this, you must define a constructor that takes an object  of its class as a parameter. For example, the following version of Box  allows one object to initialize another:
// Here,  Box allows one object to initialize another.
class Box  {
double  width;
double  height;
double  depth;
//  construct clone of an object
Box(Box  ob) { // pass object to constructor
width =  ob.width;
height =  ob.height;
depth =  ob.depth;
}
//  constructor used when all dimensions specified
Box(double  w, double h, double d) {
width =  w;
height =  h;
depth =  d;
}
//  constructor used when no dimensions specified
Box()  {
width =  -1; // use -1 to indicate
height =  -1; // an uninitialized
depth =  -1; // box
}
//  constructor used when cube is created
Box(double  len) {
width =  height = depth = len;
}
// compute  and return volume
double  volume() {
return  width * height * depth;
}
}
class  OverloadCons2 {
public  static void main(String args[]) {
// create  boxes using the various constructors
Box mycube  = new 
Box  myclone = new Box(mybox1);
double  vol;
// get  volume of first box
vol =  mybox1.volume();
System.out.println("Volume  of mybox1 is " + vol);
// get  volume of second box
vol =  mybox2.volume();
System.out.println("Volume  of mybox2 is " + vol);
// get  volume of cube
vol =  mycube.volume();
System.out.println("Volume  of cube is " + vol);
// get  volume of clone
vol =  myclone.volume();
System.out.println("Volume  of clone is " + vol);
}
}
As you  will see when you begin to create your own classes, providing many forms of  constructor methods is usually required to allow objects to be constructed in a  convenient and efficient manner.
 
No comments:
Post a Comment