Qual é a diferença entre substituição de função e sobrecarga?

Função Sobrecarga -

Em Sobrecarga de funções, na qual temos mais de um método, com o mesmo nome, mas com uma lista de parâmetros diferente. O compilador chamará o método correto, dependendo do nome e do número de parâmetros. Se dois métodos com o mesmo nome e lista de parâmetros, o compilador ficará confuso com o método a ser chamado, por isso gerará um erro, mas se eles tiverem uma lista de parâmetros diferente, o compilador irá verifique quantos parâmetros foram passados ​​para ele.dependendo do parâmetro, ele chamará o método.Por exemplo. classe A {public void mip (int n) {System.out.println ("Um parâmetro");

public void mip (int n, int m) {System.out.println ("Dois parâmetros");} classe MainA {public static void main (String args []) {A a1 = new A (); a1.mip ( 5); // aqui o compilador entra na classe A e verifica o método mip, se houver um método mip e ele aceitar um parâmetro, o compilador chamará esse método e mostrará a saída.a1.mip (3,5); aqui o compilador entra na classe A e verifica o método mip, se houver um método mip e ele aceitar dois parâmetros, o compilador chamará esse método e mostrará a saída.

Substituição de método - é dito que ocorre na herança, quando um método na subclasse tem o mesmo nome e a mesma lista de parâmetros da superclasse .. então esse método é considerado como substituindo o método da superclasse .. se a chamada de método estiver dentro da subclasse o método da subclasse é chamado .. se a chamada do método for de fora da superclasse e da subclasse, nesse caso, o método correto será executado de acordo com o objeto que chama, se o objeto pertencer à subclasse, o método da subclasse será executado ou se o objeto pertence à superclasse, o método da superclasse será executado.

A substituição do método ocorre quando o método tem o mesmo nome e as mesmas assinaturas (lista de parâmetros); se as assinaturas forem diferentes, isso se tornará uma sobrecarga de método.

E dois métodos envolvem a substituição de métodos, um deve estar na subclasse e outro na superclasse.

Sobrecarga de método contra substituição de método Ambos são usados ​​para alcançar o polimorfismo. Sobrecarga de método - mesmo nome, mas lista de parâmetros diferente e substituição de método - mesmo nome e mesma lista de parâmetros.

A JVM não está envolvida na sobrecarga de método. Portanto, não é necessário diferenciar entre sobrecarga de método e substituição de método.

Você entenderia isso claramente se entender como a sobrecarga e a substituição de métodos são implementadas pelo Java nos bastidores.

Antes de abordar a diferença entre sobrecarga e substituição, vamos primeiro examinar o polimorfismo.

O que é polimorfismo?

Polimorfismo é a capacidade de um método para fazer coisas diferentes com base no objeto em que está atuando. Em outras palavras, o polimorfismo permite definir uma interface e ter várias implementações.

Diferentes tipos de polimorfismo em java. 1)

Sobrecarga de método

2)

Substituição de método

Tipos de polimorfismo em java: estático, dinâmico, tempo de execução e tempo de compilação

Agora, voltemos à pergunta original e entendamos a diferença entre sobrecarga e substituição.

  • O primeiro e mais importante é que o método sobrecarrega um polimorfismo em tempo de compilação, enquanto a substituição do método é polimorfismo em tempo de execução. Portanto, a JVM precisa lidar apenas com a substituição de método. A sobrecarga de método já foi resolvida após a compilação.
  • Em Sobrecarga de método, os métodos devem ter assinatura diferente. Em Substituição de método, os métodos devem ter a mesma assinatura.

Existem muitas outras diferenças, mas acima de duas podem realmente diferenciar a sobrecarga de método da substituição de método.

Antes de terminar, vejamos também o que cada um está tentando alcançar.

Sobrecarga de método é "adicionar" ou "estender" mais ao comportamento do método. Substituição de método é "Alterar" o comportamento existente do método.

Para obter mais informações sobre sobrecarga de método e substituição de método, visite nosso

Perguntas da entrevista em Java

e respostas. Prepare-se para qualquer nível de entrevista de emprego em Java usando nosso banco de dados de perguntas e respostas para entrevistas em Java.

Em Java, basicamente usamos a palavra "método" no lugar de "função". O exemplo para

sobrecarga de método

(também conhecido como polimorfismo em tempo de compilação) é:

Classe A{

soma nula () {

POP ("20");

}

soma nula (int x, int y) {

SOP (x + y);

}

}

PSVM (String args []) {

A a = novo A ();

a.sum (); // 20

a.sum (20,30); // 50

}

Então, basicamente, o nome é o mesmo, mas a sintaxe / assinatura é diferente a cada momento.

Isso geralmente acontece no momento da compilação, ou seja, a jvm sabe que esses métodos existem mesmo durante a compilação do código.

Em caso de substituição de método

, você precisa substituir o método com a mesma assinatura em uma classe diferente (ou classe filho). O nome e a assinatura do método da classe filha devem ser iguais ao método da classe pai.

classe Animal {

void come () {}

}

classe Dog estende Animal {

void come () {

POP ("gato");

}

}

classe Cat estende Animal {

void come () {

POP ("mouse");

}

}

PSVM (String [] args) {

Animal a = novo Cão ();

a.eats (); //gato

Animal b = novo gato ();

b.eats (); //rato

}

Portanto, o resultado pode ser determinado apenas em

tempo de execução

(no caso de

substituição de método /

também conhecido como polimorfismo em tempo de execução).

A sobrecarga de método em Java é um conceito de programação quando o programador declara dois ou mais métodos com o mesmo nome, mas com assinatura de método diferente, por exemplo, alteração na lista de argumentos (número de parâmetros) ou alteração no tipo de argumento (tipo de dados dos parâmetros).

Propriedades de sobrecarga em Java:

1) Os métodos sobrecarregados são ligados usando ligação estática em Java, que ocorre durante o tempo de compilação, ou seja, quando você compila o programa Java. Durante o processo de compilação, o método de ligação do compilador chama o método real. 2) Os métodos sobrecarregados são rápidos porque são ligados durante o tempo de compilação e nenhuma verificação ou ligação é necessária durante o tempo de execução.

3) A regra mais importante de sobrecarga de método em Java é que dois métodos sobrecarregados devem ter uma assinatura diferente, como - 1) O número de argumentos em um método deve ser diferente. 2) O tipo de argumento em um método deve ser diferente (se o número de argumentos em um método for o mesmo).

Nota: Em Java, a Sobrecarga de método não é possível alterando o tipo de retorno do método.

Vantagem:

Sobrecarga 1.Method

aumenta a legibilidade do programa

.

Exemplo:

public void show (String message) // método original

{

System.out.println (mensagem);

}

// Método sobrecarregado: o número de argumentos é diferente.

show nulo público (mensagem String, show booleano)

{

System.out.println (mensagem);

}

// Método sobrecarregado: o tipo de argumento é diferente

show nulo público (mensagem inteira) {

System.out.println (mensagem);

}

A substituição e a sobrecarga de funções são formas de polimorfismo.Polimorfismo: Poly: many, Morph: formPor definição: Polimorfismo é a capacidade de um objeto assumir várias formas.

Sobrecarga

é quando o mesmo nome de método é usado para 2 ou mais métodos na mesma classe. Aqui está um exemplo simples: public class Sum {public void add (int a, int b) {return a + b; } public void add (int a, int b, int c) {retorna a + b + c; }}

Para sobrecarga de método, a assinatura do método (número de argumentos, tipo de argumento e ordem dos argumentos) deve ser diferente. O tipo de retorno não faz parte da assinatura.

Substituindo

é quando o mesmo nome de função de uma classe base pode ser usado em uma classe derivada. Por exemplo: considere a classe:

classe pública Shape {public void draw () {// faça alguma coisa}}

Considere a classe Circle que estende Shape:

public class Circle estende Shape {public void draw () {// Faça algo diferente da classe Shape}}

Na classe Circle, se o método draw () não for criado, a implementação da classe Shape será usada quando chamarmos draw () em um objeto de classe derivado. Mas no código acima, o método draw () na classe Circle substitui a implementação da classe Shape. Isso é substituição de função.

Regras para substituição: 1. A assinatura do método nos métodos substituídos e substituídos deve ser exatamente a mesma. Se eles forem diferentes, será um método sobrecarregado. O tipo de retorno do método de substituição pode ser uma classe filho do tipo de retorno declarada no método substituído. Métodos privados, estáticos e finais não podem ser substituídos em java.4. O método de substituição não pode lançar a exceção marcada mais alta na hierarquia do que a lançada pelo método substituído. 5. O método de substituição não pode reduzir o escopo de acesso do método substituído. Se o método substituído na classe pai estiver protegido, o método substituído na classe filho não poderá ser privado. Ele deve ser protegido (mesmo acesso) ou público (acesso mais amplo).

Você pode passar

Head First Java, Segunda Edição.

Isso explica os conceitos de java de uma maneira fácil e divertida.

Espero que isto ajude.

Conceito básico:

A sobrecarga de funções e a substituição de funções implementam a lógica do polimorfismo (simplesmente: a capacidade de uma entidade agir de maneira diferente). Aqui a entidade é método, portanto, um método com o mesmo nome atua de maneira diferente nos dois casos. A sobrecarga de função implementa o polimorfismo estático, enquanto a substituição implementa o polimorfismo dinâmico. Embora Kathy Sierra (famosa autora de livros de certificação Java da OCA / OCP) use o termo polimorfismo apenas com substituição. Aqui estou usando o JAVA para explicar os conceitos.

Diferença:

1

Sobrecarga

Na sobrecarga de função, 2 ou mais métodos terão o mesmo nome com número diferente de parâmetros / tipos de parâmetros / disposição dos parâmetros. Por exemplo. soma nula (int a, int b, int c) {} soma nula (int a, int b) {} soma nula (int a, float b) {} soma nula (float b, int a) {} acima são válidas sobrecarregadas versão de sum ().

Nota:

Diferença apenas no tipo de retorno não é considerada sobrecarga. Por exemplo. soma vazia (int a, int b) {} int sum (int a, int b) {return 0;} Isso não é uma sobrecarga válida. O compilador dará erro, pois trata os dois métodos da mesma forma.

Substituindo:

Isso ocorre quando a classe derivada grava sua própria versão de um método que já foi definido na classe base. Ambos os métodos na classe base e na classe derivada

deve ter a mesma declaração.

Por exemplo. classe Car {void drive () {System.out.print ("driving");}} classe Ferrari estende a classe Car {void drive () {System.out.print ("fast fast");}} // classe Substituída Suzuki estende Car {void drive () {System.out.print ("dirigindo muito rápido");}} // Unidade overriddenvoid (velocidade int) {System.out.print ("dirigindo muito rápido a" + velocidade + "km / hr "); // Sobrecarregado}} classe Drive {public static void main (String args []) {Car c = new Car (); c.drive (); // Imprime driving fastc = new Suzuki (); c. drive (); // Imprime muito rápido fastc.drive (20); // Imprime muito rápido a 20 km / h}}

Assim, vemos o mesmo método se comportando de maneira diferente. Substituindo é a capacidade de um método da classe base se comportar especificamente como classe derivada.

2)

Na sobrecarga, a chamada para o método é decidida em

tempo de compilação

, enquanto que na substituição é decidido em

tempo de execução

.

3)

Na sobrecarga, o tipo de retorno dos métodos pode ser diferente, enquanto na substituição, o tipo de retorno do método da classe derivada deve ser o mesmo ou um subtipo do tipo de retorno do método da classe base (

TIPO DE RETORNO COVARIANTE)

Por exemplo. classe Car {Car drive () {return new Car ();}}

classe Ferrari estende Car {Ferrari drive () {retorna nova Ferrari ();}}}

classe Suzuki estende Car {Car drive () {return new Car ();}} // tipo de retorno válido e overrinding válido} // já que Suzuki é o subtipo de Car

4)

Em Sobrecarga, os métodos podem lançar exceções diferentes, mas em métodos substituídos e substituídos

não pode lançar exceções mais amplas

.Eg.class Car {void drive ()

lança IOException

A classe {System.out.print ("driving");}} Ferrari estende Car {void drive ()

lança exceção

{// Ilegal, dá erro; desde que System.out.print ("fast fast"); // lança uma exceção mais ampla}}

5)

Em Sobrecarga, os especificadores de acesso dos métodos podem ser diferentes, mas na sobrescrição, os especificadores de acesso devem ser iguais ou do tipo menos restritivo .Eg.class Car {

protegido

void drive () {System.out.print ("driving");}} classe Ferrari estende Car {

público

void drive () {System.out.print ("fast fast"); // Legal, uma vez que o público é menos restritivo} // do que protegido} a classe Suzuki estende Car {

privado

void drive () {System.out.print ("dirigindo muito rápido");}} // Ilegal, // dá erro, pois o privado é mais restritivo do que o protegido}

A principal diferença é que a sobrecarga é estática e ocorre em tempo de compilação, enquanto a substituição é dinâmica e ocorre em tempo de execução. Existem regras separadas para sobrecarregar e substituir em Java.

A seguir também pode ajudar:

Regras de sobrecarga e substituição de método em Java

O que é polimorfismo em Java? Método sobrecarregando ou substituindo?

Qual é a diferença entre Sobrecarga e Substituição em Java

Você pode sobrecarregar ou substituir métodos estáticos em Java

19 Método Java Sobrecarregando e substituindo perguntas e respostas da entrevista

Diferença entre sobrecarga de método e substituição em Java?