// generic data structures, abstractions with class Object
// notice the widening and narrowing operations

import java.lang.Object;
import java.lang.Class;

 class A {

	void f() {System.out.println("A");}

 }


 class B {

	void g() {System.out.println("B");}	

 }


 class ObjectDemo {

	public static void main (String args[]) {

		Object arr[];
		arr = new Object[2];
	
		arr[0] = new A();
		arr[1] = new B();

		A a =  (A) arr[0];
		a.f();

		try {
			Class c = arr[1].getClass();
			Object anobj;

			anobj = c.newInstance();
		
			B b = (B)anobj;
		
			b.g();



		} catch (Exception e) {}

	}

 }

