Introducing  Classes
 
The class  is at the core of Java. It is the logical construct upon which the entire Java  language is built because it defines the shape and nature of an object. As such,  the class forms the basis for object-oriented programming in Java. Any concept  you wish to implement in a Java program must be encapsulated within a class.  Because the class is so fundamental to Java, this and the next few Posts will be  devoted to it. Here, you will be introduced to the basic elements of a class and  learn how a class can be used to create objects. You will also learn about  methods, constructors, and the this keyword.
Class  Fundamentals
Classes  have been used since the beginning of this book. However, until now, only the  most rudimentary form of a class has been used. The classes created in the  preceding Posts primarily exist simply to encapsulate the main( ) method,  which has been used to demonstrate the basics of the Java syntax.  
As you  will see, classes are substantially more powerful than the limited ones  presented so far. Perhaps the most important thing to understand about a class  is that it defines a new data type. Once defined, this new type can be used to  create objects of that type.
Thus, a  class is a template for an object, and an object is an instance of  a class. Because an object is an instance of a class, you will often see the two  words object and instance used  interchangeably.
The  General Form of a Class 
When you  define a class, you declare its exact form and nature. You do this by specifying  the data that it contains and the code that operates on that data. While very  simple classes may contain only code or only data, most real-world classes  contain both. As you will see, a class' code defines the interface to its  data.
A class is  declared by use of the class keyword. The classes that have been used   up to this point are actually very  limited examples of its complete form. Classes can (and usually do) get much  more complex. 
The  general form of a class definition is shown here: 
class  classname {
type  instance-variable1;
type  instance-variable2;
//  ...
type  instance-variableN;
type  methodname1(parameter-list)  {
// body of  method
}
type  methodname2(parameter-list)  {
// body of  method
}
//  ...
type  methodnameN(parameter-list)  {
// body of  method
}
}
The data,  or variables, defined within a class are called instance variables.  The code is contained within methods. Collectively, the methods and  variables defined within a class are called members of the class. In most  classes, the instance variables are acted upon and accessed by the methods  defined for that class. 
Thus, it  is the methods that determine how a class' data can be used. Variables defined  within a class are called instance variables because each instance of the class  (that is, each object of the class) contains its own copy of these  variables.
Thus, the  data for one object is separate and unique from the data for another. We  will come  back to this point shortly, but it is an important concept to learn early.  All  methods have the same general form as main( ), which we have been using  thus far. However, most methods will not be specified as static or  public. 
Notice  that the general form of a class does not specify a main( ) method. Java  classes do not need to have a main( ) method. You only specify one if  that class is the starting point for your program. Further, applets don't  require a main( ) method at all. 
C++  programmers will notice that the class declaration and the implementation of the  methods are stored in the same place and not defined separately. This sometimes  makes for very large .java files, since any class must be entirely  defined in a single source file. This design feature was built into Java because  it was felt that in the long run, having specification, declaration, and  implementation all in one place makes for code that is easier to  maintain.
A Simple  Class
Let's  begin our study of the class with a simple example. Here is a class called  Box that defines three instance variables: width, height,  and depth. Currently, Box does not contain any methods (but some  will be added soon).
class Box  {
double  width;
double  height;
double  depth;
}
As stated,  a class defines a new type of data. In this case, the new data type is called  Box. You will use this name to declare objects of type Box. It is  important to remember that a class declaration only creates a template;  it does not create an actual object. Thus, the preceding code does not cause any  objects of type Box to come into existence. 
To  actually create a Box object, you will use a statement like the  following: 
Box mybox  = new Box(); // create a Box object called mybox
After this  statement executes, mybox will be an instance of Box. Thus, it  will have
"physical"  reality. For the moment, don't worry about the details of this  statement.
Again,  each time you create an instance of a class, you are creating an object  that
contains  its own copy of each instance variable defined by the class. Thus, every Box  object will contain its own copies of the instance variables width,  height, and depth. To access these variables, you will use the  dot (.) operator. The dot  operator links the name of the object  with the name of an instance variable. For example, to assign the width  variable of mybox the value 100, you would use the following  statement: 
mybox.width  = 100;
This  statement tells the compiler to assign the copy of width that is  contained within the mybox object the value of 100. In general, you use  the dot operator to access both the instance variables and the methods within an  object.
Here is a  complete program that uses the Box class: 
/* A  program that uses the Box class.
Call this  file BoxDemo.java
*/
class Box  {
double  width;
double  height;
double  depth;
}
// This  class declares an object of type Box.
class  BoxDemo {
public  static void main(String args[]) {
Box mybox  = new Box();
double  vol;
// assign  values to mybox's instance variables
mybox.width  = 10;
mybox.height  = 20;
mybox.depth  = 15;
// compute  volume of box
vol =  mybox.width * mybox.height * mybox.depth;
System.out.println("Volume  is " + vol);
}
}
You should  call the file that contains this program BoxDemo.java, because the  main( ) method is in the class called BoxDemo, not the class  called Box. When you compile this program, you will find that two  .class files have been created, one for Box and one for  BoxDemo. The Java  compiler automatically puts each class into its own .class file. It is  not necessary for both the Box and the BoxDemo class to actually  be in the same source file. You could put each class in its own file, called  Box.java and BoxDemo.java, respectively.
To run  this program, you must execute BoxDemo.class. When you do, you will see  the following output:
Volume is  3000.0
As stated  earlier, each object has its own copies of the instance variables. This  means that  if you have two Box objects, each has its own copy of depth,  width, and height. It is important to understand that changes to  the instance variables of one object have no effect on the instance variables of  another. For example, the following program declares two Box  objects:
// This  program declares two Box objects.
class Box  {
double  width;
double  height;
double  depth;
}
class  BoxDemo2 {
public  static void main(String args[]) {
double  vol;
// assign  values to mybox1's instance variables
mybox1.width  = 10;
mybox1.height  = 20;
mybox1.depth  = 15;
/* assign  different values to mybox2's
instance  variables */
mybox2.width  = 3;
mybox2.height  = 6;
mybox2.depth  = 9;
// compute  volume of first box
vol =  mybox1.width * mybox1.height * mybox1.depth;
System.out.println("Volume  is " + vol);
// compute  volume of second box
vol =  mybox2.width * mybox2.height * mybox2.depth;
System.out.println("Volume  is " + vol);
}
}
The output  produced by this program is shown here:
Volume is  3000.0
Volume is  162.0
As you can  see, mybox1's data is completely separate from the data contained  in  mybox2. 
 
No comments:
Post a Comment