1. Point.java
?public class Point
{
??? private float mfX, mfY;
??? public Point() {
??????? mfX = mfY = 0.0f;
??? }
??? public Point(float fX, float fY) {
??????? mfX = fX;
??????? mfY = fY;
??? }
??? public Point(Point p) {
??????? mfX = p.mfX;
??????? mfY = p.mfY;
??? }
??? // You will generally not need to write a finalizer. Member variables that
??? // are of reference type will be automatically garbage collected once they
??? // are no longer in use. Finalizers are only for cleaning up system resources,
??? // e.g. closing files.
??? protected void finalize() throws Throwable {
??????? System.out.print("In Point finalizer: ");
??????? print();
??????? super.finalize();? // If you have to write a finalizer, be sure to do this.
??? }
??? public void print() {
??????? System.out.println("Point print: (" + mfX + "," + mfY + ")");
??? }
}
2. Shape.java
?public abstract class Shape
{
??? private Point mCenter;
??? protected static int miCount = 0;? // An example of a static member variable.
??? public Shape() {
??????? mCenter = new Point();
??? }
??? public Shape(Point p) {
??????? mCenter = new Point(p);
??? }
??? // You will generally not need to write a finalizer.?Member variables that
??? // are of reference type (i.e. mCenter) will be automatically garbage collected
??? // once they are no longer in use. Finalizers are only for cleaning up system
??? // resources, e.g. closing files.
??? protected void finalize() throws Throwable {
??????? System.out.print("In Shape finalizer: ");
??????? print();
??????? super.finalize();? // If you have to write a finalizer, be sure to do this.
??? }
??? public void print() {
??????? System.out.print("Shape print: mCenter = ");
??????? mCenter.print();
??? }
??? // An example of a static member function.
??? public static int getCount() {
??????? return miCount;? // Can only access static members in static functions.
??? }
}
3. Circle.java
?public class Circle extends Shape
{
??? private float mfRadius;
??? public Circle() {
??????? super();? // Call the base class constructer.
??????? mfRadius = 0.0f;
??????? miCount++;? // Can access this because it is protected in base class.
??? }
??? public Circle(float fX, float fY, float fRadius) {
??????? super(new Point(fX, fY));? // Call the base class constructer.
??????? mfRadius = fRadius;
??????? miCount++;
??? }
??? public Circle(Point p, float fRadius) {
??????? super(p);? // Call the base class constructer.
??????? mfRadius = fRadius;
??????? miCount++;
??? }
??? // You will generally not need to write a finalizer. Member variables that
??? // are of reference type (i.e. mCenter) will be automatically garbage collected
??? // once they are no longer in use.?Finalizers are only for cleaning up system
??? // resources, e.g. closing files.
??? protected void finalize() throws Throwable {
??????? System.out.print("In Circle finalizer: ");
??????? print();
??????? super.finalize();? // If you have to write a finalizer, be sure to do this.
??? }
??? public void print() {
??????? System.out.print("Circle print: mfRadius = " + mfRadius + " ");
??????? super.print();
??? }
}
4. Square.java
?public class Square extends Shape
{
??? private float mfLength;
??? public Square() {
??????? super();? // Call the base class constructer.
??????? mfLength = 0.0f;
??????? miCount++;? // Can access this because it is protected in base class.
??? }
??? public Square(float fX, float fY, float fLength) {
??????? super(new Point(fX, fY));? // Call the base class constructer.
??????? mfLength = fLength;
??????? miCount++;
??? }
??? public Square(Point p, float fLength) {
??????? super(p);? // Call the base class constructer.
??????? mfLength = fLength;
??????? miCount++;
??? }
??? // You will generally not need to write a finalizer.?Member variables that
??? // are of reference type (i.e. mCenter) will be automatically garbage collected
??? // once they are no longer in use.?Finalizers are only for cleaning up system
??? // resources, e.g. closing files.
??? protected void finalize() throws Throwable {
??????? System.out.print("In Square finalizer: ");
??????? print();
??????? super.finalize();? // If you have to write a finalizer, be sure to do this.
??? }
??? public void print() {
??????? System.out.print("Square print: mfLength = " + mfLength + " ");
??????? super.print();
??? }
}
5. Main.java
?public class Main
{
??? final static int MAX = 3;? // An example of a constant class member variable.
??? public static void main(String[] args)
??? {
??????? // Create some Point objects.
??????? Point a;
??????? a = new Point();
??????? a.print();
??????? Point b;
??????? b = new Point(2,3);
??????? b.print();
??????? Point c = new Point(b);
??????? c.print();
??????? // Print out the total number of Shapes created so far.?At this point,
??????? // no Shapes have been created, however, we can still access static member
??????? // function Shape.getCount().
??????? System.out.println("Total number of Shapes = " + Shape.getCount());
??????? // Create a Circle object and hold on to it using a Shape reference.
??????? Shape s;
??????? s = new Circle(a,1);
??????? s.print(); // This will call the print method in Circle.
??????? // Create an array of Shapes.
??????? Shape[] shapeArray;
??????? shapeArray = new Shape[MAX];? // An array of Shape references.
??????? shapeArray[0] = new Square();
??????? shapeArray[1] = new Circle(4,5,2);
??????? shapeArray[2] = new Square(3,3,1);
??????? // Print out the array of Shapes. The length member gives the array size.
??????? for (int i = 0; i < shapeArray.length; i++) {
??????????? shapeArray[i].print();
??????? }
??????? // Print out the total number of Shapes created so far. At this point,
??????? // 4 Shapes have been created.
??????? System.out.println("Total number of Shapes = " + Shape.getCount());
??????? // We can mark the objects for destruction by removing all references to
??????? // them.?Normally, we do not need to call the garbage collector explicitly.
??????? // Note: here we have not provided a way to decrement the Shape counter.
??????? a = b = c = null;
??????? s = null;
??????? for (int i = 0; i < shapeArray.length; i++) {
??????????? shapeArray[i] = null;
??????? }
??????? shapeArray = null;
??? }
}