Java

TOPIC 38 – INSTANCE METHODS

 

 

LESSON NOTE

 

 

INTRO

 

We have already worked with the first two components of classes – data fields and constructors.  In this lesson, we will look at including the third and final component to classes – instance methods.

Instance methods allow us to store functionality related to the class inside the class. 

SIMILAR TO FUNCTIONS

Instance methods are very similar to functions.  They have a method prototype at the top that works in the exact same way.  They have a method body that is executed each time the method is called.

 

The one difference is that instance methods are not static.  So static doesn't appear in the prototype.  As a result, these methods have access to the data fields of the object they are called on (more below).

DETAILS ABOUT INSTANCE METHODS

 

Instance methods are called using an object name.  The general form is:

objectName.methodName(…). 

All instance methods have access to the object's data fields.  There is no need to pass the data fields to the methods.  They can simply be used at any time.

EXAMPLE - CIRCLE CLASS

 

In this example, we will add an instance method to the following circle class:
 

public class Circle

{

   public double radius;

  

   public Circle(double tmpr)

   {

      radius = tmpr;

   }

}

 

The instance method that we will add is called area().  It calculates the area of the circle (using the radius) and return that value.

 

public double area()

{

   double a = Math.PI * radius * radius;

   return a;

}

 

The entire class is below:

 

public class Circle

{

   //DATA FIELDS

   public double radius;

  

   //CONSTRUCTOR(S)

   public Circle(double r)

   {

      radius = r;

   }

 

   //INSTANCE METHOD(S)

   public double area()

   {

      double a = Math.PI * radius * radius;

      return a;

   }

}

 

We can now create a Circle object and try out the instance method.

 

public class CircleTester

{

   public static void main(String[] args)

   {

      //Create Circle object c with radius 10.

      Circle c = new Circle(10.0);

 

      //Output the area of the Circle object to screen.

      System.out.println("The area is " + c.area());

   }

}

 

 

 

EXAMPLE - POINT CLASS

 

Let’s consider the Point class from last topic.  We will add a method called distanceFromOrigin() that will simply calculate and return the Point’s distance from the origin.

 

public double distanceFromOrigin()

{

   return Math.sqrt(x * x + y * y);

}


 

The updated point class would look like this:

 

public class Point

{

   //DATA FIELDS

   public double x;

   public double y;

 

         //CONSTRUCTOR(S)

   public Point(double xvalue, double yvalue)

         {

            x = xvalue;   //setting x data field

 y = yvalue;   //setting y data field

   }

 

              public Point()

              {

                 x = 0.0;

                 y = 0.0;

              }

               

               //INSTANCE METHODS

   public double distanceFromOrigin()

   {

      return Math.sqrt(x * x + y * y);

   }

}

 

The following statements would create a Point object p and output to screen p’s distance from the origin.

 

     Point p = new Point(12.1, 2.3);

     System.out.println(“Dist. from origin: “ + p.distanceFromOrigin());

 

 

SPECIAL METHOD – toString()

 

It is good practice to include a toString() method in our classes.  The job of the method is to simply return a String version of the object.  It could include the values of the all the datafields or perhaps just the key datafields.

 

The toString() method is special because it is automatically called when Java needs to convert your object into a String.  This is notably the case inside the System.out.println() statement.

 

The toString() methods for a Point class might look like this:

 

   public String toString()

   {

      return "(" + x + " ," + y + ")";

   }

 

Since toString() is automatically called by Java when we need a String version of our object, we can do the following to call the toString() method:

 

          System.out.println(p);