How to define a class that you can use to construct Circle objects:
public class Circle
{
public double radius = 1; /** The radius of this circle */
public Circle() { } /** Constructor 1 for a circle object */
public Circle(double newRadius) /** Constructor 2 for a circle object */
{
radius = newRadius;
}
public double getArea() /** Return the area of this circle */
{
return 3.14159 * radius * radius;
}
public void setRadius(double newRadius) /** Set new radius for this circle */
{
radius = newRadius;
}
}
|
We can use the Circle class to create 2 Circle objects as follows:
public static void main()
{
Circle circle1 = new Circle();
// Invokes Circle() to make this circle
Circle circle2 = new Circle(2);
// Invokes Circle(double) to make this circle
}
|
Demo in BlueJ - show the objects in main(). Step into the constructors
The Unified Modeling Language representation of classes and objects:
public static void main()
{
Circle circle1 = new Circle();
// Invokes Circle() to make this circle
Circle circle2 = new Circle(2);
// Invokes Circle(double) to make this circle
}
|
Demo in BlueJ - show the objects in main(). Step into the constructors
A Java class uses variables to define data fields (properties) of objects:
public class Circle
{
public double radius = 1; /** The radius of this circle */
public Circle() { } /** Constructor 1 for a circle object */
public Circle(double newRadius) /** Constructor 2 for a circle object */
{
radius = newRadius;
}
public double getArea() /** Return the area of this circle */
{
return 3.14159 * radius * radius;
}
public void setRadius(double newRadius) /** Set new radius for this circle */
{
radius = newRadius;
}
}
|
A Java class uses methods to define the actions of objects:
public class Circle
{
public double radius = 1; /** The radius of this circle */
public Circle() { } /** Constructor 1 for a circle object */
public Circle(double newRadius) /** Constructor 2 for a circle object */
{
radius = newRadius;
}
public double getArea() /** Return the area of this circle */
{
return 3.14159 * radius * radius;
}
public void setRadius(double newRadius) /** Set new radius for this circle */
{
radius = newRadius;
}
}
|
Important note: methods to define the actions of objects do not have the static qualifier
public class Circle
{
public double radius = 1; /** The radius of this circle */
public Circle() { } /** Constructor 1 for a circle object */
public Circle(double newRadius) /** Constructor 2 for a circle object */
{
radius = newRadius;
}
public double getArea() /** Do NOT use static qualifier ! */
{
return 3.14159 * radius * radius;
}
public void setRadius(double newRadius) /** Do NOT use static qualifier ! */
{
radius = newRadius;
}
}
|
A class provides special methods called constructors which are invoked (only) to create a new object:
public class Circle
{
public double radius = 1; /** The radius of this circle */
public Circle() { } /** Constructor 1 for a circle object */
public Circle(double newRadius) /** Constructor 2 for a circle object */
{
radius = newRadius;
}
public double getArea() /** Return the area of this circle */
{
return 3.14159 * radius * radius;
}
public void setRadius(double newRadius) /** Set new radius for this circle */
{
radius = newRadius;
}
}
|
Constructors are designed to perform initializing actions, such as initializing the data fields of objects
A class that represents real world objects usually does not need a main( ) method:
public class Circle
{
public double radius = 1; /** The radius of this circle */
public Circle() { } // called when you use: new Circle()
public Circle(double newRadius) // called when you use: new Circle(number)
{
radius = newRadius;
}
public double getArea() /** Return the area of this circle */
{
return 3.14159 * radius * radius;
}
public void setRadius(double newRadius) /** Set new radius for this circle */
{
radius = newRadius;
}
}
|
Without a main( ) method, such class cannot be run as a Java program
You may put a main( ) method in the Circle class to test the methods:
public class Circle
{
public double radius = 1; /** The radius of this circle */
public Circle() { } // called when you use: new Circle()
public static void main(String[] args)
{
Circle circle1 = new Circle();
Circle circle2 = new Circle(2);
}
public Circle(double newRadius) // called when you use: new Circle(number)
{
radius = newRadius;
}
public double getArea() /** Return the area of this circle */
{
return 3.14159 * radius * radius;
}
public void setRadius(double newRadius) /** Set new radius for this circle */
{
radius = newRadius;
}
}
|
I prefer to write a separate class to do the testing...
Example invoking methods on objects:
public static void main()
{
Circle circle1 = new Circle(); // Create a Circle object circle1
Circle circle2 = new Circle(2); // Create a Circle object circle2
double area1 = circle1.getArea(); // Tell circle1 to run getArea()
System.out.println("Area of circle1 = " + area1);
double area2 = circle2.getArea(); // Tell circle2 to run getArea()
System.out.println("Area of circle2 = " + area2);
circle1.setRadius(5); // Tell circle1 to run setRadius()
area1 = circle1.getArea(); // Tell circle1 to run getArea()
System.out.println("Area of circle1 = " + area1);
}
|
The Circle class implementation allows a user to access the object variables directly:
public static void main()
{
Circle circle1 = new Circle(); // Create a Circle object circle1
Circle circle2 = new Circle(2); // Create a Circle object circle2
double area1 = circle1.getArea(); // Tell circle1 to run getArea()
System.out.println("Area of circle1 = " + area1);
circle1.radius = 10; // Update the radius variable directly
area1 = circle1.getArea(); // Tell circle1 to run getArea()
System.out.println("Area of circle1 = " + area1);
}
|
Because:
public class Circle
{
public double radius = 1; // The radius variable is not private
....
|
We can prevent direct access to variables in a class by using the private qualifier:
public static void main()
{
Circle circle1 = new Circle(); // Create a Circle object circle1
Circle circle2 = new Circle(2); // Create a Circle object circle1
double area1 = circle1.getArea(); // Tell circle1 to run getArea()
System.out.println("Area of circle1 = " + area1);
circle1.radius = 10; // Compile error !!!
area1 = circle1.getArea(); // Tell circle1 to run getArea()
System.out.println("Area of circle1 = " + area1);
}
|
Because:
public class Circle
{
private double radius = 1; // Disallows direct access to radius
....
|