/* PrintableObject.java */ import java.lang.reflect.*; public class PrintableObject { public String toString() { StringBuffer sb = new StringBuffer(200); Class clazz = getClass(); while (clazz != null) { Field[] fields = clazz.getDeclaredFields(); for (int i = 0; i < fields.length; ++i) { sb.append(fields[i].getName() + " = "); try { Object obj = fields[i].get(this); if (obj.getClass().isArray()) { Object[] ar = (Object[])obj; for (int j = 0; j < ar.length; ++j) { sb.append(ar[j].toString() + " "); } sb.append("\n"); } else { sb.append(obj.toString() + "\n"); } } catch (IllegalAccessException e) { sb.append(e.toString() + "\n"); } } clazz = clazz.getSuperclass(); } return sb.toString(); } public static void main(String[] args) { JavaProgrammer jim = new JavaProgrammer(); jim.name = "Jim Miller"; jim.department = "Operating Systems"; jim.age = 32; String[] langs = {"C", "Pascal", "PERL", "Java"}; jim.languages = langs; jim.linesofcode = 55000; jim.jdk12 = true; jim.swing = false; System.out.println(jim); } } class Employee extends PrintableObject { public String name; public String department; public int age; } class Programmer extends Employee { public String[] languages; public int linesofcode; } class JavaProgrammer extends Programmer { public boolean jdk12; public boolean swing; }