• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Gurzi

Pergunta para os Gurus

4 mensagens neste tópico

Estou aqui a seguir um belíssimo exemplo de polimorfismo +  interfaces e surgiu-me esta dúvida.

class Accountant {
   void pay(PayableByAccountant personToPay){
       String details = personToPay.getBankDetails();
       processPayment(details);
    }
}

Existem duas classes que implementam o PayableAccountant que são Employees e ThirdPartCompany.

Se eu quiser chamar o método pay, não estou a conseguir perceber o que teria que fazer, ou seja..

Primeiro teria que criar um objecto do tipo Employee certo ??

Então vamos,

Employee Tiago = new Employee();

Agora se eu quiser fazer paid a tiago, primeiro tenho que criar um objecto da classe Accountant ??

Accountant xpto =  new Accountant();

e agora como consigo fazer o pagamento ??

xpto.paid(Tiago);

assim ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

sim, o método 'pay' (ou 'paid'??) recebe um objecto que implemente a interface 'PayableByAccountant' (tanto podia ser um Employees como um ThirdPartCompany).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tentei então fazer um código a ver se percebia, isto assim está correcto ?

public abstract class Employee implements PayableByAccountant
{
    public abstract String getBankDetails(){};
}

public class SalariedEmployee extends Employee
{

    public String getBankDetails()
    {
        return "00232322323";
     }
}




class Accountant
{
    void pay(PayableByAccountant personToPay)
    {
        String details =  personToPay.getBankDetails();
        processPayment(details);
    }
    
    private void processPayment(String dt)
    {
        // example , connect to db and increment the value of the account
        
    }
}

public interface PayableByAccountant
{
    String getBankDetails();
}

public class Test
{
    public static void main( String[] args)
    {
        SalariedEmployee tiago =  new SalariedEmployee();
        Accountant xpto =  new Accountant();
        xpto.pay( tiago );
    }
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

penso que sim.

só no método abstracto é que acho que não precisavas das "{}" no fim.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora