Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Qual vantagem de fazer o polimorfismo não ficou claro pra me.

Vejamos se usarmos funcionario g = new gerente( ); não podemos usar os metodos do gerente correto? então qual a vantagem disso? não era mas interessante cria um funcionario g = new funcionario ( ); ou gerente g = new gerente ( );

5 respostas

Como todo gerente é um funcionário a ideia é ter um padrão, para o caso de itens que só o gerente possui usamos a herança ou interface e para itens muitos específicos usamos composição..

Ex: todo funcionário possui e bonificação mas só o gerente tem login, logo como o gerente tem que pegar essa bonificação e o login, criar o login como composição (ou interface), para que o funcionário continue com seus atributos e métodos sem precisar alterar, a ideia é criar um local onde você só mexe no necessário sem precisar ficar criando mais e mais objetos, classes e ou métodos desnecessariamente. só lembrar da regra do quadrado "Todo quadrado é retângulo mas nem todo retângulo é um quadrado"

então não é necessario criar desse jeito se funcionario g = new gerente( ); e sim gerente g = new gerente ( ); se caso quizesse um gerente. Se caso fosse criar outro funcionario seria igual lá design d = new design( ); e não funcionario d = new design( ); já que todo design herdar os atribultos de funcionario. é isso?

solução!

mais ou menos, só que se uma classe herda da outra você pode usar o nome da classe que está herdado (classe mãe), exemplo: funcionário classe mãe, gerente classe filha posso usar tanto // funcionario g = new gerente(); quanto gerente g = new gerente(); // no caso o que sofreu o polimorfismo foi funcionário que pode ser tanto gerente quanto funcionário já o gerente herda de funcionário, lembrando que se usar herança as filhas ficam acoplada mais firme a questão da nomeclatura fica a cargo do programador a ideia é quero usar uma classe sem ter que criar mais e masi então crio uma que tem todos os atributos que preciso ou pode usar interface que os metodos serão implementados na classe filha

exemplo: eu te dou o dinheiro pra tu comprar um ps5 (herança/ interface), ou eu mesmo compro e te dou o ps5 (polimofismo)

a sua duvida é com relação a nomeclatura sendo que ela pode ser qualuer uma desde que voce deixe claro quem é a mae e auqis são as filhas

Entendi obrigado por tira minha duvida

Boa tarde, Bruno Tudo bem?

Vejo como vantagem a utilização do polimorfismo em situações como os exemplos que o Nico nos mostrou no curso que foram SistemaIterno e o ControleBonificacao. Se você observar foram definidos aos métodos parâmetros do tipo mais genérico, segue como exemplo o código abaixo para você ter uma vizualização..

As linhas abaixo também estão como comentários no código..

  1. Nesse método foi definido um parâmetro do tipo mais genérico que é o tipo Funcionario (Super Class de: Gerente, Administrador, Designer e EditorVideo)
  2. Quando eu for chamar o método registra eu posso passar como parâmetro um Gerente, um Administrador, um Designer ou ou EditorVideo. Pois todos são classes filhas do tipo Funcionario, logo "também" são um Funcionario certo?
public class ControleBonificacao {

    private double soma;
    //Nesse método foi definido um parâmetro do tipo mais genérico que é o tipo Funcionario (Classe Mãe de: Gerente, Administrador, Designer, EditorVideo)
    //Quando eu for chamar o método registra eu posso passar como parâmetro um Gerente, Administrador, Designer ou EditorVideo. Pois todos são um Funcionario.
    public void registra(Funcionario funcionario) {
        double bonificacao = funcionario.getBonificacao();
        this.soma += bonificacao;
    }

    public double getSoma() {
        return this.soma;
    }

}

No código abaixo você ver na prática o polimorfismo acontecendo.. Estou chamando o método registra, e...

public class TesteReferencias {

    public static void main(String[] args) {

        Gerente gerente = new Gerente();

        gerente.setNome("Taiuã");
        gerente.setSalario(5000.0);

        ControleBonificacao controle = new ControleBonificacao();
        controle.registra(gerente);

        EditorVideo editorVideo = new EditorVideo();

        editorVideo.setSalario(2000.0);
        controle.registra(editorVideo);

        Designer designer = new Designer();

        designer.setSalario(2000.0);
        controle.registra(designer);

        System.out.println(controle.getSoma());

    }

}

Espero que tenha ajudado.

Abs,

Taiuã Nascimento