Use a generic toString()
import java.lang.reflect.Field; public class Main { public static void main(String args[]) { System.out.println(new MyClass().toString()); } } class MyClass { String hello = "hi"; int i = 0; public String toString() { StringBuilder sb = new StringBuilder(); Class cls = getClass(); Field[] f = cls.getDeclaredFields(); for (int i = 0; i < f.length; i++) { f[i].setAccessible(true); try { sb.append(f[i].getName()+"="+ f[i].get(this)+"\n"); } catch (Exception e) { e.printStackTrace(); } } if (cls.getSuperclass().getSuperclass() != null) { sb.append("super:"+ super.toString()+"\n"); } return cls.getName()+"\n" + sb.toString(); } }