Você está na página 1de 17

Captulo anterior ( I )

1)
2) 3) 4) 5) 6)

O que so modelos?
Exemplos de modelos O que POO? Encapsulamento, Herana e Polimorfismo Classes, Objectos, Instncias e Referncias Exerccios Prtico

CAPTULO II CONSTRUTORES E SOBRECARGA

1) O que so construtores? 2) Sobrecarga de mtodos 2.1) A palavra chave this 3) Exerccios Prticos

O que so Construtores?
So mtodos especiais, que so chamados automaticamente quando instncias so construtores criadas atravs da palavrachave new. Atravs da criao de construtores, podemos garantir que o

cdigo que eles contm ser executado antes de qualquer


outro cdigo em outros mtodos, j que uma instncia de uma classe s pode ser utilizada depois de ter sido criada com new, o que causar a execuo do construtor.

12 de Junho de 2012

Programao Orientada por Objectos

Construtores so teis para inicializar campos de instncias de classes para garantir que, quando mtodos destas instncias forem chamados, elas contenham valores especficos e no os default. Caso os campos de uma instncia no sejam inicializados, os seguintes valores sero adoptados:

Campos do tipo boolean so inicializados automaticamente com a constante

false.

Campos do tipo char so inicializados com o caracter cujo cdigo Unicode zero e que impresso como um espao.

Campos de tipos inteiros (byte, short, long, int) ou de ponto flutuante (float,

double) so automaticamente inicializados com o valor zero, do tipo do campo


declarado.

Instncias de qualquer classe, inclusive da classe String, so inicializadas automaticamente com null.

12 de Junho de 2012

Programao Orientada por Objectos

As diferenas bsicas entre construtores e outros mtodos so: 1. Construtores devem ter exatamente o mesmo nome da

classe a que pertencem, inclusive considerando maisculas e minsculas.

2.

Construtores no podem retornar nenhum valor, nem

mesmo void, portanto devem ser declarados sem tipo de retorno.

3. Construtores no devem receber modificadores como public ou private, e sero pblicos se a classe for pblica.
12 de Junho de 2012 Programao Orientada por Objectos 5

Notas: Quando as classes criadas pelo programador no tem um construtor declarado explicitamente, o compilador Java cria um construtor default, que no recebe argumentos nem

executa nenhum cdigo.

Quando criamos um ou mais construtores na nossa classe, o

compilador no inclui o construtor default.

12 de Junho de 2012

Programao Orientada por Objectos

Sobrecarga e Mtodos
Em algumas ocasies, ser til ou interessante poder executar um mtodo em uma classe passando mais ou menos argumentos, conforme a necessidade.

O Java, permite a criao de mtodos com nomes iguais, desde que as suas assinaturas sejam diferentes. A assinatura de um mtodo composta de seu nome mais os tipos de argumentos que so passados para este mtodo, independente dos nomes de variveis usadas na declarao

do mtodo.
12 de Junho de 2012 Programao Orientada por Objectos 7

O tipo de retorno do mtodo no considerado como sendo parte da assinatura: no podemos ter dois mtodos com o mesmo nome, tipo de argumentos mas tipo de retorno diferente* A possibilidade de criar mais de um mtodo com o mesmo nome e assinaturas diferentes conhecida como Sobrecarga de mtodos. A deciso sobre qual mtodo ser chamado quando existem dois ou mais mtodos ser feita pelo compilador, baseado na assinatura dos mtodos.

* Em alguns casos, til ter mtodos com o mesmo nome e nmero de argumento,
mas tipo de retorno diferente.
12 de Junho de 2012 Programao Orientada por Objectos 8

A palavra chave this


Em Java no podemos chamar um construtor directamente. Felizmente ela cria, internamente para cada instncia, uma autoreferncia, ou seja, uma referncia prpria instncia. Esta referncia representada pela palavra-chave this. Para chamar um construtor de dentro de outro, basta usar a palavra-chave this substituindo o nome do construtor.

Construtores no podem ser chamados indiscriminadamente de dentro de qualquer mtodo: existem algumas regras para chamada de construtores que so:

12 de Junho de 2012

Programao Orientada por Objectos

1.

Somente

construtores

podem

chamar

construtores

como

subrotinas.
2.

Se um construtor for chamado a partir de outro, a chamada deve ser a primeira linha de cdigo dentro do corpo do construtor.

3. 4.

Construtores no so chamados pelos seus nomes, e sim por this Construtores podem chamar outros mtodos. Por exemplo, pode ser interessante ter um construtor e um mtodo que inicializem as instncias, e chamar o mtodo de dentro do construtor. Mtodos no podem chamar construtores, nem mesmo com this.

5.

Construtores no podem ser chamados recursivamente: um construtor s pode chamar diretamente outro construtor, e no a si prprio.

12 de Junho de 2012

Programao Orientada por Objectos

10

Exerccio Prtico
1.

Identifique e explique o(s) erro(s) na classe abaixo. a) class Ponto2D { private double x,y; ponto2d(double _x, double _y){ x = _x; y = _y; } }

12 de Junho de 2012

Programao Orientada por Objectos

11

Soluo - a)
class Ponto2D { private double x,y; ponto2d(double _x, double _y){ x = _x; y = _y; O nome do construtor deve ser igual ao } nome da classe }

12 de Junho de 2012

Programao Orientada por Objectos

12

b)
class Data { private byte dia, ms; private short ano; private Data(byte d, byte m, short a) { dia = d; ms = m; ano = a; } }
12 de Junho de 2012 Programao Orientada por Objectos 13

C)
class Ponto2D { private double x,y; Ponto2D() { Ponto2D(0.0,0.0); } Ponto2D(double coord1,double coord2) { x = coord1; y = coord2; } }
12 de Junho de 2012 Programao Orientada por Objectos 14

2. Escreva dois construtores para a classe Contador, um que no receba argumentos e considere que o contador comea a contar a partir

do zero, e outro que aceita um valor inicial para


contagem.

?
12 de Junho de 2012 Programao Orientada por Objectos 15

3. Escreva dois construtores para a classe Ponto2D : um sem argumentos que considere que

o ponto est na origem, ou seja, com coordenadas


(0;0), e um que receba dois argumento do tipo double e que os utilize para inicializar os campos

da classe.

?
12 de Junho de 2012 Programao Orientada por Objectos 16

Prximos captulos

Campos e Mtodos Estticos Encapsulamento, Herana e Polimorfismo

UML e Java

12 de Junho de 2012

Programao Orientada por Objectos

17

Você também pode gostar