Higher Order Programming in JAVA: Introspection, Subsumption and Extraction