JDBC uses interfaces because it only provides a contract for the classes. The actually implementation is provided by the JDBC driver. For example, if you use Oracle, you have a driver in the classes12.zip file. This file contains all of Oracle's custom classes that implement the JDBC interfaces.