[OCPJP6] 016 – Orientação a objetos

Sobrecarga de construtores

Como vimos anteriormente o grande propósito de um construtor é instanciar uma classe, e indo além podemos definir contratos para instanciar uma determinada classe, ou seja, definir atributos obrigatórios e/ou padrões.

Por exemplo, uma classe Quadrado(int lado) define que toda instância de Quadrado obrigatoriamente deve atribuir um valor “lado”.

Legal né… E se eu quisesse oferecer a possibilidade de instanciar um Quadrado com lados fracionários? Quadrado(double lado)

package certificacao;
public class Quadrado {
    double lado;
    public Quadrado(int l) { this.lado = l; }
    public Quadrado(double l) { this.lado = l; }
}

E se houvesse uma herança (generalização -> especialização)? Até onde poderiamos ir? 😛

  • O construtor mais específico irá ser chamado
  • Se houver ambiguidade não irá compilar
package certificacao;
public class Pessoa {
    public Pessoa() { System.out.println("()"); }
    public Pessoa(Object param1) { System.out.println("(Object)"); }
    // Lembre-se: String é uma especialização de Object
    public Pessoa(String param1) { System.out.println("(String)"); }
}

– E se eu fizesse: new Pessoa(null); o que aconteceria?

Se você respondeu: (String) você acertou, porque String é a classe mais específica entre Object e String 😉

 – E seu ao invés de Pessoa(Object param1) eu tivesse Pessoa(Integer param1) o que aconteceria?

new Pessoa(null); não compilaria, porque o compilador não saberia o que fazer, já que Integer e String são ambíguos a null. Para funcionar seria necessário um cast new Pessoa((String)null);. Veremos mais sobre cast em breve.

Comentem, estendam o assunto… Compartilhem =)

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s