this es el objeto. NO hace referencia a la clase Leaf si no al objeto leaf. Son 2 cosas muy diferentes.
El metodo increment, esta incrementando la variable i, y devuelve el objeto leaf. El propio objeto.
Así en el main estas incrementandol i 3 veces (donde estan las 4 veces que dices??), y lo estas imprimiendo por pantalla.
Por otro lado print no es una palabra reservada en java. y si quitas el return de incremente te da un error porque la declaracion del metodo es:
para que no te de error tendria que ser de tipo void.
Respecto al segundo ejercicio, hazlo en 2 lineas a ver si lo ves mas claro
Código:
Person p = new Person();
p.eat(new Apple());
p = null;
Que es lo mismo.
Saludos.