Also available as ObjBase.java

/**
 * Title: ObjBase
 * Description: Every object is an Object 
 * @author hollingd@cs.rpi.edu
 */

class Point {
        int x,y;
        // constructor - notice we can use this to get past
        //   the (silly) field name shadowing.
        Point( int x, int y) {
                this.x = x;
                this.y = y;
        }

        // a method that allows moving the point
        void MoveTo(int newx, int newy) {
                x = newx; y = newy;
        }

        // this is called by System.out.println
        //  (or anything that treats it as a String)
        public String toString() {
                return(x + "," + y );
        }
}


// A circle is a special kind of point (inheritance)

class Circle extends Point{
        int radius;

        // constructor
        Circle( int x, int y, int r) {
                // call superclass constructor
                super(x,y);
                radius = r;
        }

        // move the center of the circle we do nothing, since we 
        // inherited the MoveTo method

        // convert to a string
        // we can use super().toString() to get at the Point toString
        public String toString() {
                return( "Center: " + super.toString() + " Radius: " + radius);
        }
}


// this class is for testing 
public class ObjBase {

        public static void main(String[] args) {
                // create some point and circle objects
                Circle c1 = new Circle(10,10,3);
                Point p1 = new Point(3,4);

                Class x = c1.getClass();
                System.out.println("c1 is a " + x.getName() );

                System.out.println("p1 is a " + p1.getClass().getName());

                // here comes the tricky part - what will this print?
                //                Point c2 = (Point) c1;
                //      System.out.println("c2 is a " + c2.getClass().getName());
                
        }        

}