Dúvida sobre Connection

3 respostas
N

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…

3 Respostas

J

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:

package com.mysql.jdbc;

public class Connection extends ConnectionProperties implements
		java.sql.Connection {

Se você criar sua propria classe que implemente java.sql.Connection, você pode atribuir sem problemas...

ex.:

public class Conexao implements java.sql.Connection{
    //implementação dos metodos
}

Connection con = new Conexao();

logico que isso não é feito porque já existem os drivers prontos...

N

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.

Valeu de novo pelo esclarecimento…

J

É isso aí!

outro exemplo é:

List lista = new ArrayList();

Collection col1 = new ArrayList();
Collection col2 = new Vector();
Collection col3 = new TreeSet();

Collection e List são interfaces...

Qualquer coisa é só falar! :wink:

Criado 25 de maio de 2006
Ultima resposta 25 de mai. de 2006
Respostas 3
Participantes 2