Ir para o conteúdo
Gurzi

Pergunta para os Gurus

Mensagens Recomendadas

Gurzi    2
Gurzi

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 ?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Rui Carlos    311
Rui Carlos

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Gurzi    2
Gurzi

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 );
    }
}

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


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade