Lamp

Category: Polymorphism
Author: Stuart Reges
Book Chapter: 9.3
Problem: Lamp
Assume the following classes have been defined:

	public class Pen extends Sock {
	    public void method1() {
		System.out.println("pen 1");
	    }
	}
	
        public class Lamp {
	    public void method1() {
		System.out.println("lamp 1");
	    }
	
	    public void method2() {
		System.out.println("lamp 2");
	    }
	
	    public String toString() {
		return "lamp";
	    }
	}
	
	public class Book extends Sock {
	    public void method2() {
		System.out.println("book 2");
	    }
	}
	
	public class Sock extends Lamp {
	    public void method1() {
		System.out.println("sock 1");
	    }
	
	    public String toString() {
		return "sock";
	    }
	}
	
   Consider the following code fragment:

	Lamp[] elements = {new Book(), new Pen(), new Lamp(), new Sock()};
	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?