Используйте одно из первых двух, если вы явно не хотите ограничивать вызов реализацией суперкласса.
Когда вы переопределяете метод суперкласса и хотите включить поведение метода суперкласса, используйте третий.
В другом месте, если вы используете третий и позже вы или кто-то другой переопределяете реализацию boo () суперкласса - в этом классе или подклассе - тогда useBoo () не будет использовать переопределение.Это обычно нежелательно, за исключением переопределения самой boo ().
Примеры:
/** Extends boo method. */
public void boo(){
super.boo(); // Good: you explicitly want to call the superclass method, not call this method again.
}
public void doSomethingThatInvolvesBoo() {
boo(); // Good -- will call this object's implementation,
// even if this is a subclass, even if there are code changes later.
this.boo(); // Good (and equivalent to simply calling boo()).
super.boo(): // Usually bad.
}