// Point.java
  // Definition of class Point
  public class Point {
     protected int x, y; // coordinates of the Point
    
     public Point() { // No-argument constructor
        // implicit call to superclass constructor occurs here
        setPoint( 0, 0); }
    
     public Point( int a, int b ) { // Constructor
		// implicit call to superclass constructor occurs here
        setPoint( a, b); }

     public void setPoint( int a, int b ) // Set x and y coordinates of Point
     {  x = a;
        y = b; }

     public int getX() {return x; }  // get x coordinate

     public int getY() {return y; } // get y coordinate
    
     public String toString()       // convert the point into a String representation
      { return "[" + x + ", " + y + "]"; }
   } // end of class Point
  ----------------------------------------------
  //Circle.java
  // Definition of class Circle
  public class Circle extends Point {  // inherits from Point
     protected double radius;
    
     public Circle() // No-argument constructor
     { // implicit call to superclass constructor occurs here
        setRadius( 0 ); }  
    
     public Circle(double r, int a, int b ) // Constructor
     {
        super( a, b);  // call to superclass constructor
        setRadius( r);}

    
     public void setRadius( double r ) // Set radius of Circle
        { radius = ( r >= 0.0 ? r : 0.0 ); }
     
public double getRadius() { return radius; } // Get radius of Circle      public double area() { return Math.PI * radius * radius; } // Calculate area of Circle     public String toString() // convert the Circle to a String    { return "Center = " + "[" + x + ", " + y + "]" + "; Radius = " + radius;} } // end of class Circle    ------------------------------------ //InheritanceTest.java // Demonstrating the "is a" relationship import java.text.DecimalFormat; public class InheritanceTest {    public static void main( String args[] )    {       Point pointRef, p;       Circle circleRef, c;       String output;       p = new Point(30, 50 );       c = new Circle(2.7, 120, 89 );       output = "Point p: " + p.toString() + "\nCircle c: " + c.toString();       // use the "is a" relationship to refer to a Circle with a Point reference       pointRef = c;   // assign subclass object to superclass variable pointRef       output += "\n\nCircle c (via pointRef): " + pointRef.toString(); // thus through polymorphism, the toString method that is invoked is the method of the // subclass, not the method of the superclass       // If a program needs to perform a sub-class specific operation, such as area // on a subclass object such as c referenced by a superclass variable such as pointRef, // see the pointRef = c above, it must first cast the superclass variable to a // subclass variable, a process known as downcasting       circleRef = (Circle) pointRef;       output += "\n\nCircle c (via circleRef): " + circleRef.toString();       DecimalFormat precision2 = new DecimalFormat( "0.00" );       output += "\nArea of c (via circleRef): " + precision2.format( circleRef.area() );             if ( p instanceof Circle ) { // Attempt to refer to Point object with Circle reference          circleRef = (Circle) p;  // line 40 in Test.java          output += "\n\ncast successful";       }       else output += "\n\np does not refer to a Circle";       System.out.println("Demonstrating the \"is a\" relationship\n" + output);       System.exit( 0);    } // end of main method } // end of class InheritanceTest