segunda-feira, 29 de outubro de 2012

Programação Orientada a Objetos - Método construtor

Programação Orientada a Objetos - Método construtor O método construtor é aquele que chamos quando instânciamos um objeto, em muitos casos é o responsável por inicializar o estado do objeto.
Ele é parecido com um método, só que ele não possui nenhum tipo de retorno (nem mesmo a declaração void) e tem que ter o mesmo nome da classe. Ele pode ser declarado com qualquer modificador de acesso, até mesmo o private. Se ele tiver um construtor private significa dezer que apenas o código de dentro da classe irá ter acesso à ele, exemplo:

class Foo{

     private Foo(){}

     private Foo foo;

     public static getInstance(){
           if(foo == null) foo = new Foo();
           return foo;
     }
}

class Bar{

     public Bar(){
         this("Oi");
     }
     private Bar(String msg){
         System.out.println(msg);
     }
}

Se você não colocar um método construtor na sua classe o compilador irá colocar para você.
Outro fator importante é que você pode ter um método com o nome de um construtor, exemplo:

class Foo{
    public Foo(){}

    void Foo(){}
}

//main

new Foo().Foo();
//fim main

Nesse exemplo ele irá executar o construtor do objeto e logo em seguinda o método void Foo.

Sempre que você estabelecer uma relação de herença você tem que chamar no construtor o construtor da super classe, caso você não gere o compilador mais uma vez faz isso para você, exceto no caso do construtor da super exigir a passagem de algum parâmetro, exemplo:

class Foo(){
   Foo(String msg){}
}

class Bar extends Foo(){
    Bar(){
        super("Oi");
    }
}

Outro fater importante é saber quando usar o "this" e o "super". O "this" é usado quando um construtor que chamar outro construtor da classe, exemplo:


class Bar{

     public Bar(){
         this("Oi");

     }

     private Bar(String msg){
         System.out.println(msg);
     }
}

Já o super é utilizado quando uma subclasse chama o construtor da super, exemplo:

class Foo(){
   Foo(String msg){}

}


class Bar extends Foo(){
    Bar(){
        super("Oi");
    }

}

Por hoje é isso pessoal, até o próximo post.