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

[Dúvida] Entendo o Uso dos Métodos especificos

Boa noite a todos, realmente ja vi 3 vezes o video "aplicando polimorfismo" e ainda nao entendo como o compilador sabe quais métodos especificos usar, seria através do seguinte código ? controle.registra(g1); que ele entende qual método usar ?

2 respostas
solução!

Olá Clodoaldo, tudo bem?

Então, em relação à sua dúvida, o compilador não sabe quais métodos específicos usar. Na verdade, ele apenas verifica se o método existe na classe que está sendo referenciada e, se existir, ele é chamado. O compilador não sabe qual método específico deve ser usado em tempo de compilação, isso só é definido em tempo de execução. O que acontece é que, quando você chama um método em um objeto, o Java verifica qual é a classe concreta desse objeto (ou seja, qual é a classe que foi instanciada) e, a partir daí, procura o método específico daquela classe. Se o método não existir naquela classe, o Java procura na superclasse e assim por diante até chegar à classe Object.

No código que você mencionou, controle.registra(g1), você está chamando o método registra() do objeto controle e passando como argumento o objeto g1, que é uma instância da classe Gerente. O compilador não sabe qual é exatamente o tipo desse objeto em tempo de compilação, mas em tempo de execução o Java vai saber que o objeto é da classe Gerente e vai chamar o método especifico da classe Gerente, caso exista.

Então, basicamente, o compilador não sabe quais métodos específicos usar, ele apenas verifica se eles existem e os chama caso a assinatura do método seja igual (mesmo parâmetros na ordem da chamada).

A assinatura de um método é composta pelo seu nome e pelos tipos e ordem dos seus parâmetros. A assinatura é utilizada pelo compilador para diferenciar um método de outro dentro da mesma classe.

Dois métodos com o mesmo nome, mas com diferentes tipos ou quantidade de parâmetros, têm assinaturas diferentes e são considerados métodos distintos pela linguagem de programação. Por exemplo, na classe abaixo, os métodos "soma" têm assinaturas diferentes:

public class Calculadora {
   public int soma(int a, int b) {
       return a + b;
   }

   public double soma(double a, double b) {
       return a + b;
   }
}

O método "soma" recebe dois parâmetros do tipo "int" na primeira declaração, e dois parâmetros do tipo "double" na segunda. Apesar dos nomes serem iguais, eles têm assinaturas diferentes e são métodos diferentes.

Dessa forma, a assinatura de um método é importante para a sobrecarga de métodos, onde métodos com o mesmo nome mas com diferentes parâmetros podem ser utilizados para executar tarefas semelhantes de maneiras diferentes. Além disso, a assinatura também é usada para implementar métodos em interfaces, onde todos os métodos têm apenas assinaturas, sem corpo definido. A classe que implementa uma interface deve fornecer um corpo para cada método correspondente, respeitando a assinatura do método na interface.

Espero ter ajudado a esclarecer sua dúvida. Qualquer outra pergunta, é só perguntar!

Poxa meu caro, muito obrigado pela esclarecimento me ajudou demais a entender essa aula !