void printSaldo(long numero) {
Conta c;
c = procurar(numero);
if (c == null)
System.out.println("A
conta " + numero + " nao existe!");
else
c.printSaldo();
}
Em particular, é interessante notar que a expressão
procurar(numero) corresponde à invocação de um
método, mas não se especifica que objeto será responsável
pela execução do método; temos uma mensagem sem um
destinatário explícito!De fato, como já vimos anteriormente, atributos e métodos são relativos a objetos e a expressão procurar(numero) é simplesmente uma abreviação para
this.procurar(numero)
onde this denota o próprio objeto (banco)
executando o método printSaldo e que, portanto,
irá executar o método procurar também. Assim, a
expressão acima denota o envio de uma mensagem de um objeto para
ele mesmo; isto é, o banco que executa a operação
printSaldo requisita a ele mesmo a conta de número
numero cadastrada no próprio banco.De uma forma geral, quando um método m é invocado a partir de um método n:
... n() {
...
m();
...
}...
Java assume que o objeto responsável pela execução de
m será o mesmo responsável pela execução de
n. Daí surge a convençÃo de que no exemplo
acima m() é uma abreviação para this.m().
Similarmente, temos a operação que debita uma conta específica cadastrada em um banco, caso ela exista:
void debitar(long numero, double valor) {
Conta c;
c = this.procurar(numero);
if (c == null)
System.out.println("A conta " + numero + " nao existe!");
else
c.debitar(valor);
}
Note que os dois métodos apresentados acima têm o mesmo
nome de métodos definidos na classe
Conta.
De fato, métodos podem ter o mesmo nome desde que
tenham tipos diferentes; isto é, os métodos devem ser
associados a classes diferentes ou terem o número,
a ordem ou os tipos dos parâmetros diferentes.
Por isso dizemos que Java suporta overloading de
métodos.O sistema Java consegue identificar que na expressão c.debitar(valor) vai ser usado o método debitar de Conta, já que a mensagem está sendo enviada a um objeto cujo nome está armazenado em c e c é do tipo Conta.
|
Paulo Borba (phmb@cin.ufpe.br)
Rodrigo Queiroz (rqcl@cin.ufpe.br) |