/ A sobrecarga de método pode ser considerada uma maneira de descrever o polimorfismo em Java? - java, oop, polimorfismo, sobrecarga de método

A sobrecarga de método pode ser considerada uma maneira de descrever o polimorfismo em Java? - java, oop, polimorfismo, sobrecarga de método

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 № 1

A 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.