Anda di halaman 1dari 37

APOO

Aula 1.4 Sobrecarga de mtodos,


mtodos estticos, campos estticos
Prof. Bruno Moreno
bruno.moreno@ifrn.edu.br
Sobrecarga de mtodos
a possibilidade de usar o mesmo nome para
mtodos
Polimorfismo;
Por exemplo:
Quais so os diferentes mtodos construtores que
uma classe Data pode ter?
So mtodos com
Data(); mesmo nome mas
Data(int d, int m, int a); nmero de argumentos
Data(Data outraData). e/ou tipos de
argumentos diferentes.

2
Sobrecarga de mtodos
Prtica
Implemente os seguintes mtodos na classe Data:
publicvoidalteraDia(byted){
dia=d;
System.out.println("EfetuoualteraDia(byted)");
}//fimdomtodo

publicvoidalteraDia(intd){
if(d>31)
System.out.println("Valorinvlidoparadia");
else
dia=(byte)d;
System.out.println("EfetuoualteraDia(intd)");
}//fimdomtodo

3
Sobrecarga de mtodos
Prtica
Crie uma classe TesteData que instancie um objeto
da classe Data e observe o efeito da sobrecarga de
mtodos. Por exemplo:
Datahoje=newData();
byteb=4;
inti=4;

hoje.alteraDia(b);
System.out.println(hoje);

hoje.alteraDia(i);
System.out.println(hoje);

hoje.alteraDia(4);
System.out.println(hoje);

4
Palavra-chave this
A palavra-chave this usada para auto-
referncia de objetos
Pode ser utilizada para diferenciar os campos do
objeto (variveis de instncias) e das variveis
locais.
publicData(bytedia,bytemes,shortano){
if(dataVlida(dia,ms,ano)){
this.dia=dia;
this.mes=mes; Variveis locais com o mesmo
this.ano=ano; nome das variveis de instncia.
}else{
this.dia=0;
this.mes=0; this diferencia variveis locais e
this.ano=0; campos.
}
}//fimdomtodo
5
Campos e mtodos estticos
Campos estticos:
Campos compartilhados por todas as instncias de
uma classe;
Somente um valor armazenado em um campo
esttico
Ou seja, a alterao deste valor por qualquer instncia,
afeta todas as outras instncias.
Mtodos estticos:
Mtodos que podem ser executados sem que
instncias da classe sejam criadas

6
Campos estticos
Exemplo: Caixa de Banco

C1 C2 C3 C4 C5 C1 C2 C3 C4 C5

Banco com filas mltiplas

Banco com fila nica

7
Campos estticos
Exemplo: Caixa de Banco (Filas Mltiplas)
publicclassSimuladorDeCaixaDeBanco1{
privateintnmeroDoCliente;
privateintnmeroDoCaixa;

publicSimuladorDeCaixaDeBanco1(intn){
numeroDoCaixa=n;
numeroDoCliente=0;
System.out.println("Caixa"+numeroDoCaixa
+"iniciouoperao.");
}//fimdoconstrutor

publicvoidproximoAtendimento(){
numeroDoCliente=numeroDoCliente+1;
System.out.print("Clientecomasenhanmero"
+numeroDoCliente+",favordirigirse
+aocaixanmero"+numeroDoCaixa+".");
}
}
8
Campos estticos
Exemplo: Caixa de Banco (Filas Mltiplas)
publicclassDemoSimuladorDeCaixaDeBanco{ A alterao da senha
local instncia: no
afeta as outras instncias!
publicstaticvoidmain(String[]args){
SimuladorDeCaixaDeBanco1c1=
newSimuladorDeCaixaDeBanco1(1);
//crieaquiasinstnciasc2,c3ec4daclasse
//SimuladorDeCaixaDeBanco1
SimuladorDeCaixaDeBanco1c5=
newSimuladorDeCaixaDeBanco1(5);
c1.prximoAtendimento();
c2.prximoAtendimento(); C1 C2 C3 C4 C5
c2.prximoAtendimento();
c4.prximoAtendimento();
c5.prximoAtendimento();
c3.prximoAtendimento();
c5.prximoAtendimento();
c2.prximoAtendimento();
}
} 9
Campos estticos
Exemplo: Caixa de Banco (Filas Mltiplas)
publicclassDemoSimuladorDeCaixaDeBanco{ A alterao da senha
local instncia: no
afeta as outras instncias!
publicstaticvoidmain(String[]args){
SimuladorDeCaixaDeBanco1c1=
newSimuladorDeCaixaDeBanco1(1);
//crieaquiasinstnciasc2,c3ec4daclasse
//SimuladorDeCaixaDeBanco1
SimuladorDeCaixaDeBanco1c5=
newSimuladorDeCaixaDeBanco1(5);
c1.prximoAtendimento();
c2.prximoAtendimento(); C1 C2 C3 C4 C5
c2.prximoAtendimento();
c4.prximoAtendimento();
c5.prximoAtendimento();
c3.prximoAtendimento();
c5.prximoAtendimento();
c2.prximoAtendimento();
}
} 10
Campos estticos
Exemplo: Caixa de Banco (Filas Mltiplas)
publicclassDemoSimuladorDeCaixaDeBanco{ A alterao da senha
local instncia: no
afeta as outras instncias!
publicstaticvoidmain(String[]args){
SimuladorDeCaixaDeBanco1c1=
newSimuladorDeCaixaDeBanco1(1);
//crieaquiasinstnciasc2,c3ec4daclasse
//SimuladorDeCaixaDeBanco1
SimuladorDeCaixaDeBanco1c5=
newSimuladorDeCaixaDeBanco1(5);
c1.prximoAtendimento();
c2.prximoAtendimento(); C1 C2 C3 C4 C5
c2.prximoAtendimento();
c4.prximoAtendimento();
c5.prximoAtendimento();
c3.prximoAtendimento(); 1
c5.prximoAtendimento();
c2.prximoAtendimento();
}
} 11
Campos estticos
Exemplo: Caixa de Banco (Filas Mltiplas)
publicclassDemoSimuladorDeCaixaDeBanco{ A alterao da senha
local instncia: no
afeta as outras instncias!
publicstaticvoidmain(String[]args){
SimuladorDeCaixaDeBanco1c1=
newSimuladorDeCaixaDeBanco1(1);
//crieaquiasinstnciasc2,c3ec4daclasse
//SimuladorDeCaixaDeBanco1
SimuladorDeCaixaDeBanco1c5=
newSimuladorDeCaixaDeBanco1(5);
c1.prximoAtendimento();
c2.prximoAtendimento(); C1 C2 C3 C4 C5
c2.prximoAtendimento();
c4.prximoAtendimento();
c5.prximoAtendimento();
c3.prximoAtendimento(); 1 1
c5.prximoAtendimento();
c2.prximoAtendimento();
}
} 12
Campos estticos
Exemplo: Caixa de Banco (Filas Mltiplas)
publicclassDemoSimuladorDeCaixaDeBanco{ A alterao da senha
local instncia: no
afeta as outras instncias!
publicstaticvoidmain(String[]args){
SimuladorDeCaixaDeBanco1c1=
newSimuladorDeCaixaDeBanco1(1);
//crieaquiasinstnciasc2,c3ec4daclasse
//SimuladorDeCaixaDeBanco1
SimuladorDeCaixaDeBanco1c5=
newSimuladorDeCaixaDeBanco1(5);
c1.prximoAtendimento();
c2.prximoAtendimento(); C1 C2 C3 C4 C5
c2.prximoAtendimento();
c4.prximoAtendimento();
c5.prximoAtendimento();
c3.prximoAtendimento(); 1 1
c5.prximoAtendimento();
2
c2.prximoAtendimento();
}
} 13
Campos estticos
Exemplo: Caixa de Banco (Filas Mltiplas)
publicclassDemoSimuladorDeCaixaDeBanco{ A alterao da senha
local instncia: no
afeta as outras instncias!
publicstaticvoidmain(String[]args){
SimuladorDeCaixaDeBanco1c1=
newSimuladorDeCaixaDeBanco1(1);
//crieaquiasinstnciasc2,c3ec4daclasse
//SimuladorDeCaixaDeBanco1
SimuladorDeCaixaDeBanco1c5=
newSimuladorDeCaixaDeBanco1(5);
c1.prximoAtendimento();
c2.prximoAtendimento(); C1 C2 C3 C4 C5
c2.prximoAtendimento();
c4.prximoAtendimento();
c5.prximoAtendimento();
c3.prximoAtendimento(); 1 1 1
c5.prximoAtendimento();
2
c2.prximoAtendimento();
}
} 14
Campos estticos
Exemplo: Caixa de Banco (Filas Mltiplas)
publicclassDemoSimuladorDeCaixaDeBanco{ A alterao da senha
local instncia: no
afeta as outras instncias!
publicstaticvoidmain(String[]args){
SimuladorDeCaixaDeBanco1c1=
newSimuladorDeCaixaDeBanco1(1);
//crieaquiasinstnciasc2,c3ec4daclasse
//SimuladorDeCaixaDeBanco1
SimuladorDeCaixaDeBanco1c5=
newSimuladorDeCaixaDeBanco1(5);
c1.prximoAtendimento();
c2.prximoAtendimento(); C1 C2 C3 C4 C5
c2.prximoAtendimento();
c4.prximoAtendimento();
c5.prximoAtendimento();
c3.prximoAtendimento(); 1 1 1 1
c5.prximoAtendimento();
2
c2.prximoAtendimento();
}
} 15
Campos estticos
Exemplo: Caixa de Banco (Filas Mltiplas)
publicclassDemoSimuladorDeCaixaDeBanco{ A alterao da senha
local instncia: no
afeta as outras instncias!
publicstaticvoidmain(String[]args){
SimuladorDeCaixaDeBanco1c1=
newSimuladorDeCaixaDeBanco1(1);
//crieaquiasinstnciasc2,c3ec4daclasse
//SimuladorDeCaixaDeBanco1
SimuladorDeCaixaDeBanco1c5=
newSimuladorDeCaixaDeBanco1(5);
c1.prximoAtendimento();
c2.prximoAtendimento(); C1 C2 C3 C4 C5
c2.prximoAtendimento();
c4.prximoAtendimento();
c5.prximoAtendimento();
c3.prximoAtendimento(); 1 1 1 1 1
c5.prximoAtendimento();
2
c2.prximoAtendimento();
}
} 16
Campos estticos
Exemplo: Caixa de Banco (Filas Mltiplas)
publicclassDemoSimuladorDeCaixaDeBanco{ A alterao da senha
local instncia: no
afeta as outras instncias!
publicstaticvoidmain(String[]args){
SimuladorDeCaixaDeBanco1c1=
newSimuladorDeCaixaDeBanco1(1);
//crieaquiasinstnciasc2,c3ec4daclasse
//SimuladorDeCaixaDeBanco1
SimuladorDeCaixaDeBanco1c5=
newSimuladorDeCaixaDeBanco1(5);
c1.prximoAtendimento();
c2.prximoAtendimento(); C1 C2 C3 C4 C5
c2.prximoAtendimento();
c4.prximoAtendimento();
c5.prximoAtendimento();
c3.prximoAtendimento(); 1 1 1 1 1
c5.prximoAtendimento();
2 2
c2.prximoAtendimento();
}
} 17
Campos estticos
Exemplo: Caixa de Banco (Filas Mltiplas)
publicclassDemoSimuladorDeCaixaDeBanco{ A alterao da senha
local instncia: no
afeta as outras instncias!
publicstaticvoidmain(String[]args){
SimuladorDeCaixaDeBanco1c1=
newSimuladorDeCaixaDeBanco1(1);
//crieaquiasinstnciasc2,c3ec4daclasse
//SimuladorDeCaixaDeBanco1
SimuladorDeCaixaDeBanco1c5=
newSimuladorDeCaixaDeBanco1(5);
c1.prximoAtendimento();
c2.prximoAtendimento(); C1 C2 C3 C4 C5
c2.prximoAtendimento();
c4.prximoAtendimento();
c5.prximoAtendimento();
c3.prximoAtendimento(); 1 1 1 1 1
c5.prximoAtendimento();
2 2
c2.prximoAtendimento();
} 3
} 18
Campos estticos
Exemplo: Caixa de Banco (Filas Mltiplas)
publicclassDemoSimuladorDeCaixaDeBanco{ A alterao da senha
local instncia: no
afeta as outras instncias!
publicstaticvoidmain(String[]args){
SimuladorDeCaixaDeBanco1c1=
newSimuladorDeCaixaDeBanco1(1);
//crieaquiasinstnciasc2,c3ec4daclasse
//SimuladorDeCaixaDeBanco1
SimuladorDeCaixaDeBanco1c5=
newSimuladorDeCaixaDeBanco1(5);
c1.prximoAtendimento();
c2.prximoAtendimento(); C1 C2 C3 C4 C5
c2.prximoAtendimento();
c4.prximoAtendimento();
c5.prximoAtendimento();
c3.prximoAtendimento(); 1 1 1 1 1
c5.prximoAtendimento();
2 2
c2.prximoAtendimento();
} 3
} 19
Campos estticos
Exemplo: Caixa de Banco (Fila nica)
publicclassDemoSimuladorDeCaixaDeBanco{ A soluo no boa pois
deixa a cargo do usurio
publicstaticvoidmain(String[]args){ a implementao de um
intsenha=0; contador.

SimuladorDeCaixaDeBanco1c1=new
SimuladorDeCaixaDeBanco1(1);
//criarinstnciasc2,c3ec4
SimuladorDeCaixaDeBanco1c5=new
SimuladorDeCaixaDeBanco1(5);

senha=c1.prximoAtendimento(senha); Voc precisa


modificar o mtodo
senha=c5.prximoAtendimento(senha); proximoAtendimento
}
}

20
Campos estticos
Podemos ver, portanto, que instncias de uma
classe que possui um campo esttico
compartilham o mesmo valor
o caso dos objetos da classe CaixaFilaUnica
e o campo senhaDoCliente;
comum se utilizar de campos estticos para
criao de constantes
Constantes so campos que no mudam seu valor;
Constantes so comumente acessadas atravs da
classe, e no atravs de instncias da classe.

21
Exemplo de classe de Constantes
A classe ConstantesMatematicas contm valores
que so constantes:
public class ConstantesMatematicas{
final static public double raizDe2 = 1.41;
final static public double raizDe3 = 1.73;
final static public double raizDe5 = 2.23;
final static public double raizDe6 = raizDe2*raizDe3;
final static public double pi = 3.14;
}

A classe ConstantesMatematicas no contm


mtodos, e todos os campos so declarados como static
No necessrio criar instncias dessa classe para acessar
seus valores.

22
Exemplo de classe de Constantes
A classe ConstantesMatematicas contm
valores que so constantes:
public class ConstantesMatematicas{
final static public double raizDe2 = 1.41;
final static public double raizDe3 = 1.73;
final static public double raizDe5 = 2.23;
final static public double raizDe6 = raizDe2*raizDe3;
final static public double pi = 3.14;
}

Os campos so declarados tambm como


final
Campos final no podem ser modificados.

23
Exemplo de classe de Constantes
A classe DemoConstantesMatematicas
demonstra o uso dos campos estticos da
classe ConstantesMatematicas:
public class DemoConstantesMatematicas{

public static void main(String args[]){


ConstantesMatematicas const1 = new ConstantesMatematicas();
ConstantesMatematicas const2 = new ConstantesMatematicas();
System.out.println(const1.raizDe2 == const2.raizDe2);
System.out.println(const1.raizDe3 == const2.raizDe3);
System.out.println(const1.raizDe4 == const2.raizDe4);
System.out.println(const1.raizDe5 == const2.raizDe5);
System.out.println(const1.raizDe6 == const2.raizDe6);

double raizDe10 = ConstantesMatematicas.raizDe2 *


ConstantesMatematicas.raizDe5;
System.out.println(A raiz quadrada de 10 + raizDe10);
}
}
24
public class DemoConstantesMatematicas{

Exemplo de classe de Constantes


public static void main(String args[]){
ConstantesMatematicas const1 = new ConstantesMatematicas();
ConstantesMatematicas const2 = new ConstantesMatematicas();
System.out.println(const1.raizDe2 == const2.raizDe2);
System.out.println(const1.raizDe3 == const2.raizDe3);
System.out.println(const1.raizDe4 == const2.raizDe4);
System.out.println(const1.raizDe5 == const2.raizDe5);
System.out.println(const1.raizDe6 == const2.raizDe6);

double raizDe10 = ConstantesMatematicas.raizDe2 *


ConstantesMatematicas.raizDe5;
System.out.println(A raiz quadrada de 10 + raizDe10);
}
}

Valores constantes so iguais para todas as


instncias da classe
ConstantesMatematicas;

25
public class DemoConstantesMatematicas{

Exemplo de classe de Constantes


public static void main(String args[]){
ConstantesMatematicas const1 = new ConstantesMatematicas();
ConstantesMatematicas const2 = new ConstantesMatematicas();
System.out.println(const1.raizDe2 == const2.raizDe2);
System.out.println(const1.raizDe3 == const2.raizDe3);
System.out.println(const1.raizDe4 == const2.raizDe4);
System.out.println(const1.raizDe5 == const2.raizDe5);
System.out.println(const1.raizDe6 == const2.raizDe6);

double raizDe10 = ConstantesMatematicas.raizDe2 *


ConstantesMatematicas.raizDe5;
System.out.println(A raiz quadrada de 10 + raizDe10);
}
}

A criao de instncias de uma classe onde


todos os campos so declarados como
static no necessria
Pode-se acessar os campos diretamente atravs
do nome da classe, j que so public
26
Mtodos Estticos
So declarados com modificador static, que
deve preceder o tipo de retorno do mtodo;
Pode ser combinado com modificadores de
acesso;
Podem ser chamados sem a necessidade de
criao de instncias de classes s quais
pertencem.

27
Aplicao: mtodos independentes
Mtodos estticos podem ser utilizados para
implementar rotinas que sejam independentes
de dados armazenados em classes
Ou seja, mtodos que fazem uso, apenas, dos
dados passados como argumentos.

public static int elevaA2(int a){


return a*a;
}

28
Aplicao: o mtodo main
O mtodo main o mtodo esttico mais
conhecido;
Permite que uma classe seja executada como
uma aplicao ou programa;
Se uma classe Teste tem um mtodo main
declarado, no precisamos criar instncias de
Teste para executar o mtodo main.

29
Aplicao: biblioteca de mtodos
a aplicao mais frequente de mtodos
estticos;
Classes que contm somente mtodos
estticos, geralmente agrupados por funo;
Por exemplo:
Classe que contm mtodos para calcular vrias
converses de unidades de cumprimento.

30
Exemplo: ConversaoUnidades
A classe ConversaoUnidades contm vrios
mtodos estticos que convertem unidades de
comprimento.
public class ConversaoUnidades{

public static double polParaCm(double pol){


double cm = pol*2.54;
return cm;
}

public static double pesParaCm(double pes){


double cm = pes*30.48;
return cm;
}

public static double milhasParaKm(double milhas){


double km = milhas*1.609;
return km;
} 31
public class ConversaoUnidades{

Exemplo: ConversaoUnidades
public static double polParaCm(double pol){
double cm = pol*2.54;
return cm;
}

public static double pesParaCm(double pes){


double cm = pes*30.48;
return cm;
}

public static double milhasParaKm(double milhas){


double km = milhas*1.609;
return km;
}
}
Essa classe no tem campos, e todos os seus mtodos so declarados
como static;
No necessrio criar instncias desta classe para usar estes mtodos;
Para que esses mtodos possam ser acessados de qualquer lugar, eles
so declarados como public.

32
Exemplo: ConversaoUnidades
A classe TestaConversao demonstra o uso
dos mtodos de ConversaoUnidades
public class TestaConversao{

public static void main(String args[]){

ConversaoUnidades conv = new ConversaoUnidades();


System.out.println(20 ps = + conv.pesParaCm(20)
+ centmetros.);
System.out.println(5 pol = + conv.polParaCm(5)
+ centmetros.);
System.out.println(20 ps =
+ ConversaoUnidades.pesParaCm(20) + centmetros.);
System.out.println(5 pol =
+ ConversaoUnidades.polParaCm(5) + centmetros.);
}
}

33
public class TestaConversao{

Exemplo: ConversaoUnidades
public static void main(String args[]){

ConversaoUnidades conv = new ConversaoUnidades();


System.out.println(20 ps = + conv.pesParaCm(20)
+ centmetros.);
System.out.println(5 pol = + conv.polParaCm(5)
+ centmetros.);
System.out.println(20 ps =
+ ConversaoUnidades.pesParaCm(20) + centmetros.);
System.out.println(5 pol =
+ ConversaoUnidades.polParaCm(5) + centmetros.);
}
}

Nota-se que no necessrio criar uma


instncia de ConversaoUnidades para
acessar seus mtodos
At se conv fosse inicializada com null, o cdigo
funcionria!!!

34
Ateno!!!
Variveis declaradas dentro de mtodos
estticos sero automaticamente estticas;
Mtodos estticos no podem invocar mtodos
no estticos da classe sem que a classe seja
instanciada;

35
Exemplos
A classe CalculoPrecoTerreno calcula o
preo de um terreno baseado em sua rea e
localizao;
O clculo feito por um mtodo esttico da
classe, permitindo sua reutilizao.
public class CalculoPrecoTerreno{

public static void main(String args[]){


double preco;
System.out.println(O preo do terreno N1 );
preco = precoDoTerreno(450,1);
System.our.println(preco);

System.out.println(O preo do terreno Q2 );


preco = precoDoTerreno(475m4);
System.our.println(preco);
36
Deus amou tanto o mundo que deu
seu Filho, seu nico filho, pela
seguinte razo: para que
ningum precise ser condenado; para
que todos, crendo nele, possam ter
vida plena e eterna.
Joo 3:16
(A Mensagem)

37