Então, eu estava estudando de Head First Java e lá eu li -
Um método sobrecarregado é apenas um método diferente que tem o mesmo nome de método. Não tem nada a ver com herança e polimorfismo.
No entanto, eu tenho outro famoso livro chamado como Java - a referência completa por Herbert Schildt e naquele livro, eu li:
A sobrecarga de métodos é uma das formas que o Javasuporta polimorfismo. A sobrecarga de método suporta o polimorfismo porque é uma maneira pela qual o Java implementa o paradigma “uma interface, vários métodos”.
Qual deles está correto?
Respostas:
2 para resposta № 1A sobrecarga do método pode ser considerada uma maneira de descrever o polimorfismo em Java?
Não, esses são dois conceitos diferentes.
Eu acho que você entendeu errado o que o autor quer dizer.
Eu enfatizei em negrito a parte importante:
A sobrecarga de métodos é uma das formas que o Java suporta o polimorfismo. Sobrecarga de método suporta polimorfismo porque é uma maneira que Java implementa o paradigma “uma interface, vários métodos”.
Significa simplesmente que a sobrecarga e o polimorfismo não são incompatíveis.
Por exemplo, você pode ter uma interface que define um método sobrecarregado:
public interface Doable{
void doX(String s);
void doX(Integer s)
}
Supor MyDoable
uma implementação do mesmo e MyChildDoable
uma subclasse de MyDoable
.
Quando você escreve:
MyDoable myDoable = new MyChildDoable();
myDoable.doX("a")
o compilador irá ligar o método invocado para void doX(String s);
(sobrecarga) mas em tempo de execução, o método da instância (MyChildDoable
) será usado (polimorfismo).
4 para resposta № 2
Para responder a sua pergunta no título, não, você não pode usar sobrecarga de método para descrever o polimorfismo.
Sobrecarga de método é quando uma classe tem dois ou mais métodos com o mesmo nome, a única diferença é seus parâmetros. Este é um conceito completamente diferente do polimorfismo.
Polimorfismo é a capacidade de um objeto assumir muitas formas. Isso ocorre quando uma referência de classe pai é usada para se referir a um objeto de classe filho.
Por exemplo, se eu tivesse a tarefa de criartipo de aplicação para um zoológico e eu queria acompanhar os animais usando classes. Eu faria uma aula chamada "Animal" e aulas adicionais para cada animal, "Leão", "Águia", "Golfinho". Depois de declarar as classes de animais como subclasses, posso usar o conceito de polimorfismo para criar leões, águias e golfinhos do tipo "Animal".
1 para resposta № 3
O polimorfismo não é de um tipo, existem diferentes tipos de polimorfismo. Por favor, consulte este link maravilhoso - Polimorfismo Java para entender melhor.
A sobrecarga suporta o polimorfismo, a invocação do comportamento polimórfico é baseada nos argumentos de tipo transmitidos e ocorre de maneira ad-hoc.
0 para a resposta № 4
Portanto, há essa ideia de polimorfismo em tempo de compilação e polimorfismo de tempo de execução. A ideia de polimorfismo implica a mesma interface, mas diferentes implementações.
A maneira como o polimorfismo "compile time" funciona éatravés da sobrecarga de funções, ou seja, você tem o mesmo nome de função, mas com uma arrumação diferente. Eu estou supondo que isto é o que o segundo segundo livro está se referindo como "polimorfismo suportado através de sobrecarga de método". No entanto, estritamente falando, a interface também inclui a arrumação, o que significa sobrecarga de método pode não constituir polimorfismo.
O polimorfismo em tempo de execução é onde o tipo real deum determinado objeto é o que determina qual implementação deve ser usada. É aqui que a interface / classe base e a classe derivada aparecem. Esta seria a definição mais precisa do polimorfismo - pelo menos do ponto de vista da orientação a objetos.
0 para a resposta № 5
Substituir - trata-se de polimorfismo.
public class Base {
public void print() {
System.out.println("base");
}
}
public class Extend extends Base {
@Override
public void print() {
System.out.println("Extend");
}
}
Vamos olhar para a saída
new Base().print();
vai imprimir "Base"
new Extend().print();
imprimirá "Estender".
Sobrecarga - trata-se de sobrecarga de método em uma classe com diferentes parâmetros:
public class ABC {
// method 1
void method(int a){
System.out.println("method 1");
}
// method 2
void method(int a, int b){
System.out.println("method 2");
}
}
Vamos olhar para a saída
ABC abc = new ABC();
abc.method(5);
irá invocar o método (int) e imprimir "método 1"
abc.method(1,2)
irá invocar o método (int, int) e imprimir "método 2"
Sobrescrevendo - este é o recurso de tempo de execução;
Sobrecarga - este recurso de tempo de compilação; todo o método de sobrecarga (com um nome) deve ser do mesmo tipo de retorno ou vazio.