OK, this may be an academic question/ note, but my thinking seems logical to me (of course) and the way CG suggests somewhat irrational. And in the current task it doesn't matter anyway, hence academic... When "destucting" an object, I would rather not take care of the base class resources/fields first, since the child class may rely/ built on those fields and may not finalize correctly in such a case. Theoretically the same as when constructing an object, but the other way around. When constructing, the first thing you do in the constructor is to call super, when finalizing an object it should be the last thing you do (imho). So the CG solution should be changed from
super.finalize();
if (connection != null) {
    connection.close();
}
to
if (connection != null) {
    connection.close();
}
super.finalize();