Sobrescrita e sobrecarga

07/08/2008

3

Alguém sabe explicar a diferença?


Responder

Posts

11/08/2008

Discorpio

Boa noite marcosalex.

Vamos começar com a Sobrecarga de métodos.

A Sobrecarga de métodos é quando voce declara dois métodos com o mesmo nome na mesma classe ou até em classes descendentes.

Ué, eu posso declarar dois métodos com o mesmo nome na mesma classe :?:

Sim, desde que voce faça diferenciação no escopo entre os métodos na passagem de parâmetros. O exemplo abaixo, voce consegue ter dois métodos construtores, assim:


public class Query {
    
    private String sql;
    private Statement state;
    private PreparedStatement ps;
    private ResultSet rs;
    
    public Query(){
    }
    
    public Query(String sqlText){
        setSql(sqlText);
    }



Repare que tenho dois métodos construtores na mesma classe Query, diferenciando entre ambas, apenas a passagem de parâmetros, este recurso me permite na hora de instanciar o objeto, com qual dos dois métodos construtores eu possa instanciar. Este recurso funciona também para os demais métodos que não sejam construtores.

Se porventura no exemplo acima eu quisesse fazer uma classe descendente da classe Query, eu poderia também fazer a sobrecarga do segundo método na sub-classe, onde somente na sub-classe eu teria a opção de escolher qualquer um dos dois métodos, entretanto já na Super classe eu só teria a opção de um método construtor.

Vamos agora para Sobrescrita de métodos.

Suponhamos que na Classe Query voce defina o método construtor assim:


public class Query {
    
    private String sql;
    private Statement state;
    private PreparedStatement ps;
    private ResultSet rs;
    
    public Query(){       
         sql = "select * from tabela";
    }



Ai eu resolvo fazer uma classe descendente da classe Query, só que com o método construtor assim:


public class Qry extends Query {
    
    private String sql;
    private Statement state;
    private PreparedStatement ps;
    private ResultSet rs;
    
    public Query(){       
    }



Repare que na classe descendente, eu defini o método construtor com a mesma assinatura da super-classe, ou seja, com o mesmo nome e passagem de parâmetros, isto faz com que o método construtor na sub-classe seja sobrescrito, onde ele passa ser o método construtor oficial do objeto qry, e não inicializará nenhuma variável. Já na super-classe (Query) ele inicializa a variável ´sql´.

Como voce pode perceber, a sobrescrita de métodos só é possível na herança de classes, onde um método sobrescrito substitui o método original da classe descendente.

Já a sobrecarga de métodos permite voce utilizar o mesmo método com o mesmo nome no mesmo objeto ou em objetos diferentes desde que voce os diferencia na passagem de parâmetros.


Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira