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 ( );
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 ( );
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?
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..
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