Let us see them more closely. The code could be built in a special way creating conditions for automatic method inline expansion. This avoids costly method call operations. Not all preprocessor instructions are removed. Data Types Data types in Java were redefined using more strict and simple rules, making data operations easier to understand and analyze.
All primitive types have strict value limits, sign, type size, the set of non-redefinable operators.
The semantics of data operations is clearly defined, including some vague sides such as dividing by 0. To handle rather complicated situations, when object can be constructed with 2 or more copies of the same parent object, there is a special virtual inheritance technique. Java uses an easier single-parent model. So there is a guarantee, that the object holds no more than one copy of parent. Example 11 shows that interfaces can be inherited too, just like classes.