Посмотрите на это, например.
Концепция похожа на это, например.
public interface Human
{
public void run();
}
public class Man implements Human
{
public void run()
{
System.out.println("Man");
}
}
public class Main
{
public static void main(String s)
{
Human h= new Man();
h.run();
}
}
Выходные данные для этой программы будут Man
.
Теперь сравниваем это с вашей проблемой.
Connection con = DriverManager.getConnection(url, username, password)
,
con не указывает на объект подключения, потому что это интерфейс, он указывает на некоторый класс, который определенно унаследовал Connection
интерфейс.
Теперь, когда вы делаете это
Statement stmt = con.createStatement();
Он не вызывает Connection
метод интерфейса, он вызывает фактический ссылочный метод.
Таким образом, вы даже не знаете, что он вернет, плюс stmt определенно укажет на класс, который
унаследовал Statement
интерфейс.