The language constructs are analyzed by meaningful examples that show the strengths and weaknesses of the respective implementation. The underlying concepts are illustrated and alternative approaches in other programming languages are shown.
An unusual feature of Eiffel is that in the inheritance hierarchy covariant redefinitions of the method's input parameters are allowed. This is expressive, but compromises type safety; Java is more conservative in that regard.
While generics were always part of Eiffel, they were introduced to Java retrospectively, which made some compromises necessary. Reflection was added to most object-oriented languages relatively late. New versions of Java have good support for reflection, while Eiffel has very limited support for reflection using an unorthodox approach.
@MastersThesis{Ziehmayer04,
author = {Mathias Ziehmayer},
title = {Vergleich der Programmierkonzepte Vererbung, Generizit\"{a}t und Reflexion in Java und Eiffel},
school = {Institute of Computer Languages, Vienna University of Technology},
year = 2004,
address = {Vienna, Austria},
url = {http://www.complang.tuwien.ac.at/Diplomarbeiten/ziehmayer04.pdf}
}