ABCD
Category: Polymorphism
			Author: Stuart Reges
			Book Chapter: 9.3
			
				Problem: ABCD
		  Assume the following classes have been defined:
        public class A extends B {
            public String toString() {
        	return "a";
            }
        }
        public class B extends D {
            public void method1() {
        	System.out.println("b 1");
            }
        
            public void method2() {
        	System.out.println("b 2");
            }
        }
        public class C extends D {
            public void method1() {
        	System.out.println("c 1");
            }
        }
        public class D {
            public String toString() {
        	return "d";
            }
        
            public void method1() {
        	System.out.println("d 1");
            }
        
            public void method2() {
        	System.out.println("d 2");
            }
        }
   Consider the following code fragment:
        D[] elements = {new B(), new A(), new D(), new C()};
	for (int i = 0; i < elements.length; i++) {
	    System.out.println(elements[i]);
	    elements[i].method1();
	    elements[i].method2();
	    System.out.println();
	}
   What output is produced by this code?