なぜConnectionインターフェースだけをcloseするのか?

最近こいつを読んでDBアクセスを勉強しています。

多くの入門書において、多くのオブジェクトがclose()メソッドで閉じられているのを良く見かけます。
Connectionインターフェース、Statementインターフェース、ResultSetインターフェースは
必ずclose()されている入門書が多いように感じています。

とある人方は「プログラマーのマナーや」といっていたので、
「マナーなので明示的にclose()処理をするのか・・・」と思っていました。
Connectionは再度使用するためにclose()処理をすると・・・・。
dameプログラマーなので安易にそう思っていました。
すると、最近勉強中の本で以下のようなコードがあったので
紹介したいと思います。
尚、著作権の問題もありますので、一部改造しています。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class DameSelect {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		String url = "jdbc:mysql://localhost/test";
		Connection con = null;
		
		try {
			String driver = "org.gjt.mm.mysql.Driver";
			
			Class.forName(driver).newInstance();
			
		} catch (Exception e) {
			System.out.println("Driverロードの失敗");
			return;
		}
		try {
			con = DriverManager.getConnection(url, "damePG", "");
			Statement select = con.createStatement();
			ResultSet result = select.executeQuery("SELECT * FROM USER");
			
			while (result.next()) {
				int key;
				String value;
				
				key = result.getInt(1);
				if (result.wasNull()) {
					key = -1;
				}
				value = result.getString(2);
				if (result.wasNull()) {
					value = null;
				}
				System.out.println("key = " + key);
				System.out.println("value = " + value);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (con != null) {
				try {
					con.close();
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}
	}
}

いまさら驚きもありあせんが、簡単なDBアクセスです。
ただ、ResultSetとStatementインターフェースはclose()処理していません。


ここで新発見があったので書いておきます。


Connectionを閉じると、暗黙的にそのConnectionに関連する全てのStatementインスタンスが閉じられる。
同様にStatementを閉じると、暗黙的にそのStatementに関連する全てのResultSetインスタンスが閉じられる。


理屈がわかれば多様してみようと思います。
皆既日食よりDBアクセスの方が好きなdamePGでした。