public class Reflection {
    public static void main(String [] args) {
        Class c1 = "hello".getClass();
        System.out.println(c1);
        Class c2 = "bye".getClass();
        System.out.println("The two classes are the same: " + c1.equals(c2));
        Class c3 = (new StringBuffer("hello")).getClass();
        System.out.println("The two classes are the same: " + c2.equals(c3));

        // classes of other data types:
        String [] arr = {"hello", "bye"};
        System.out.println(arr.getClass());
        int [] i_arr = {6, 7};
        System.out.println(i_arr.getClass());
        System.out.println(int.class); //getClass doesn't work for primitive types

        Circle circle = new Circle(6,7,5);
        System.out.println("the class of a circle: " + circle.getClass());
        System.out.println("the superclass of a circle: " +
                           circle.getClass().getSuperclass());
        ColorCircle cc = new ColorCircle(7, 8, 5, "blue");
        System.out.println("the class of a color circle: " + cc.getClass());
        System.out.println("the superclass of a color circle: " +
                           cc.getClass().getSuperclass());
        System.out.println("Class hierarchy of ColorCircle:");
        Class c = cc.getClass();
        while ( !c.equals((new Object()).getClass())) {
            System.out.println(c);
            c = c.getSuperclass();
        }

        try {
            String s = "hello".getClass().newInstance(); // constructor takes no arguments
            System.out.println(s);
        } catch (InstantiationException e) {
            System.out.println("Cannot create an instance");
        } catch (IllegalAccessException e) {
            System.out.println("Cannot access the object");
        }

        try {
            Class cl = Class.forName("Circle");
            Circle  circ = (Circle) cl.newInstance(); // constructor takes no arguments
            circ.draw();
        } catch (InstantiationException e) {
            System.out.println("Cannot create an instance");
        } catch (IllegalAccessException e) {
            System.out.println("Cannot access the object");
        } catch (ClassNotFoundException e) {
            System.out.println("Cannot find the class");
        try {
            Class cl = Class.forName("Circle");
            Circle  circ = (Circle) cl.newInstance(); // constructor takes no arguments
            circ.draw();
        } catch (InstantiationException e) {
            System.out.println("Cannot create an instance");
        } catch (IllegalAccessException e) {
            System.out.println("Cannot access the object");
        } catch (ClassNotFoundException e) {
            System.out.println("Cannot find the class");
        }

    }
}

----------------------------------------------------

public interface Shape {
    public void draw();
}

---------------------------------------------------

public class Circle implements Shape {
    private int x;
    private int y;
    private int radius;

    public Circle() {

    }

    public Circle (int x, int y, int radius) {
        this.x = x;
        this.y = y;
        this.radius = radius;
    }
    public void draw() {
        System.out.println("x = " + x + " y = " + y + " r = " + radius);
    }
}

------------------------------------------------------------

public class ColorCircle extends Circle{
    private String color;
    public ColorCircle (int x, int y, int radius, String color) {
        super(x,y,radius);
        this.color = color;
            }
    public void draw() {
        super.draw();
        System.out.println(" color = " + color);
    }
}


CSci 4651 course.