Você está na página 1de 17

Revisão: Métodos,

Construtores e Sobrecarga
Métodos
„ Servem para indicar o comportamento da classe
… Permitem o acesso aos campos da classe (leitura e
modificação de campos privados): métodos tipo set e
get.
… Permitem a execução de pequenas tarefas envolvendo
os campos da classe e outras informações.
… Podem receber outras informações na forma de
parâmetros ou argumentos.
… Podem retornar valores para a aplicação ou classe que
os executou ou void quando não retornarem nada.
Métodos para acesso aos campos
public class ContaBancaria // sem métodos !
{
private int númeroDaConta;
private boolean éEspecial;
private double saldo;
}

public class Programa


{
public static void main(String[] args)
{
ContaBancaria minhaConta = new ContaBancaria();
// Como acessar e usar os campos ?
}
}
Métodos para acesso aos campos
public class ContaBancaria
{
private int númeroDaConta;
private boolean éEspecial;
private double saldo;
public void abre(int nc,boolean esp,double si)
{
númeroDaConta = nc;
éEspecial = esp;
saldo = si;
}
public double saldo()
{
return saldo;
}
public void deposita(double quanto)
{
saldo = saldo + quanto;
}
public void retira(double quanto)
{
saldo = saldo - quanto;
}
}
Métodos para acesso aos campos
public class Programa
{
public static void main(String[] args)
{
ContaBancaria minhaConta = new ContaBancaria();
minhaConta.abre(12412,false,100.0);
minhaConta.deposita(100);
minhaConta.retira(120);
minhaConta.deposita(200);
System.out.println(minhaConta.saldo());
// Posso alterar o saldo diretamente ?
}
}
Assinaturas de métodos
„ Nome + número + tipos dos parâmetros =
assinatura dos métodos
„ Somente podemos executar métodos cujas
assinaturas sejam correspondentes:

// ERROS:
minhaConta.abre(12412);
minhaConta.deposita(“100”);
minhaConta.retira();
minhaConta.deposita(false);
System.out.println(minhaConta.retira(100));
Métodos: exemplo mais complexo
public void transfere(ContaBancaria outraConta,
double valor)
{
outraConta.retira(valor);
deposita(valor);
}

public static void main(String[] argumentos)


{
ContaBancaria minhaConta = new ContaBancaria();
minhaConta.abre(12412,false,100.0);
ContaBancaria contaDoPaulo = new ContaBancaria();
contaDoPaulo.abre(12426,false,500.0);
minhaConta.transfere(contaDoPaulo,300);
System.out.println(minhaConta.saldo()); // 400.0
System.out.println(contaDoPaulo.saldo()); // 200.0
}
Problema: ordem de chamada dos métodos
„ Quem garante que as contas foram realmente
abertas?
public static void main(String[] argumentos)
{
ContaBancaria minhaConta = new ContaBancaria();
minhaConta.abre(12412,false,100.0);
ContaBancaria contaDoPaulo = new ContaBancaria();
minhaConta.transfere(contaDoPaulo,300);
contaDoPaulo.abre(12426,false,500.0);
System.out.println(minhaConta.saldo()); // 400.0
System.out.println(contaDoPaulo.saldo()); // 500.0
}
Problema: ordem de chamada dos métodos
„ Solução: garantir que um método será chamado
antes de todos os outros: Construtor.
„ Construtores podem ser usados para inicialização
de campos da classe, antes que outros métodos
possam ser executados.
„ Construtores são executados automaticamente
quando criamos instâncias de classes usando a
palavra-chave new.
Construtores
public class ContaBancaria
{
private int númeroDaConta;
private boolean éEspecial;
private double saldo;
public ContaBancaria(int nc,boolean esp,double s)
{
númeroDaConta = nc;
éEspecial = esp;
saldo = s;
}
public void deposita(double quanto) { saldo = saldo + quanto; }
public void retira(double quanto) { saldo = saldo - quanto; }
public double saldo() { return saldo; }
public void transfere(ContaBancaria outraConta,double valor)
{
outraConta.retira(valor);
deposita(valor);
}
}
Construtores
„ Construtores devem ter o mesmo nome da classe
… Construtores devem ser declarados com a mesma
visibilidade da classe (geralmente public)
… Construtores não devem retornar nada, nem mesmo
void
… Construtores podem receber argumentos ou parâmetros
… Se não existirem construtores em uma classe, Java cria
automaticamente um sem argumentos
… Se existirem construtores explícitos, somente estes
poderão ser usados.
Construtores
public static void main(String[] argumentos)
{
ContaBancaria minhaConta =
new ContaBancaria(12412,false,100.0);
// ERRO ! ContaBancaria contaDoPaulo =
// new ContaBancaria();
ContaBancaria contaDoPaulo =
new ContaBancaria(12426,false,500.0);
minhaConta.transfere(contaDoPaulo,300);
System.out.println(minhaConta.saldo()); // 400.0
System.out.println(contaDoPaulo.saldo()); // 200.0
}
Construtores (mais exemplos)
public static void main(String[] argumentos)
{
ContaBancaria minhaConta;
ContaBancaria minhaOutraConta;
ContaBancaria contaDoPedro =
new ContaBancaria(23412,false,1000.0);
// ERROS !
minhaConta.deposita(100);
contaDoPedro.transfere(minhaConta,300);
minhaConta.transfere(contaDoPedro,200);
System.out.println(minhaConta.saldo());
}
Sobrecarga de métodos
„ Permite a criação de métodos com o mesmo nome,
diferenciados pelo número e tipo de parâmetros.
… Nome + número + tipos dos parâmetros = assinatura
dos métodos
„ Permite comportamento especializado dos métodos
sem ter que usar nomes especializados.
… O programador que usa as classes não tem que
conhecer vários métodos que fazem (quase) a mesma
coisa.
„ Serve também para construtores !
Sobrecarga de métodos: exemplo
// Transfiro a quantia desejada de uma conta para a
// outra
public void transfere(ContaBancaria outraConta,
double valor)
{
outraConta.retira(valor);
deposita(valor);
}

// Assumo que vou transferir todo o dinheiro de


// uma conta para a outra
public void transfere(ContaBancaria outraConta)
{
double valor = outraConta.saldo();
outraConta.retira(valor);
deposita(valor);
}
Sobrecarga de construtores: exemplo
public class ContaBancaria
{
private int númeroDaConta;
private boolean éEspecial;
private double saldo;
public ContaBancaria(int nc)
{
númeroDaConta = nc;
éEspecial = false;
saldo = 0;
}
public ContaBancaria(int nc,boolean esp,double s)
{
númeroDaConta = nc;
éEspecial = esp;
saldo = s;
}
}
Chamada de métodos com sobrecarga
public static void main(String[] argumentos)
{
ContaBancaria minhaConta = new ContaBancaria(12412);
ContaBancaria contaDoPaulo =
new ContaBancaria(12426,false,500.0);
ContaBancaria contaDoLuiz =
new ContaBancaria(12437,false,600.0);
minhaConta.transfere(contaDoPaulo,300);
minhaConta.transfere(contaDoLuiz);
System.out.println(minhaConta.saldo()); // 900.0
System.out.println(contaDoLuiz.saldo()); // 0.0
System.out.println(contaDoPaulo.saldo()); // 200.0
}

Você também pode gostar