Galera, tenho a seguinte dúvida no simples código abaixo, o qual eu entendo como funciona, mais quando olhei a API fiquei confuso:
import java.sql.*;
public class Conectar{
public Conectar(){
try{
Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);
Connection con = DriverManager.getConnection("jdbc:odbc:DataBase","","");
}
catch(ClassNotFoundException cnf){
System.out.println("Classe não encontrada");
}
}
}
Pronto, agora minha dúvida é: Andei olhando a API do pacote java.sql, e vi que Connection é uma interface. No meu modesto conhecimento, eu achava que as interfaces eram feitas para serem implementadas pelas classes. Mas no código acima que abre uma conexão com o BD, eu estou declarando a variável con, que é de referência do tipo da interface Connection, e atribuo a ela uma conexão.
Agora vem realmente a dúvida: Seria correto eu dizer que a variável con
faz referência a um objeto de conexão, que implementa a interface Connection ? E se qualquer objeto que implemente a interface Connection do pacote java.sql poderia ser atribuida a variavel de referencia con ?
Galera, não consegui nem durmir essa noite por causa disso…me ajudem.
Aguardo retorno…
A ideia da interface é justamente você poder “tipificar” uma variavel com ela, e receber qualquer objeto, de qualquer classe que a implemente, no caso da interface java.sql.Connection a classe que implementa ela, é uma classe do driver…
Veja por exemplo a declaração da classe do driver do MySQL:
[code]package com.mysql.jdbc;
public class Connection extends ConnectionProperties implements
java.sql.Connection {[/code]
Se você criar sua propria classe que implemente java.sql.Connection, você pode atribuir sem problemas…
ex.:
[code]public class Conexao implements java.sql.Connection{
//implementação dos metodos
}
Connection con = new Conexao();[/code]
logico que isso não é feito porque já existem os drivers prontos…
Obrigado de novo, Jairelton
então, agora ja to sabendo, que posso declarar um variavel do tipo de um interface, e atribuir a ela qualquer classe que implemente aquela interface especificada. Eu achava que poderia atribuir as variaveis apenas objetos de tipos de classes e subclasses. Mas agora sei que posso definir uma variavel de um tipo de interface, e atribuir qualquer objeto que a implemente…sem querer ser repetitivo.