Remplacement vs Surcharge en Java

Introduction

La substitution et la surcharge sont des concepts fondamentaux en programmation Java. Ce sont les moyens de mettre en œuvre le polymorphisme dans nos programmes Java. Le polymorphisme est l’un des concepts de la POO (Programmation Orientée Objet).

Screenshot of Java code with arrows pointing at instances where overloading and overriding are occurring.

Lorsque la signature de la méthode (nom et paramètres) est identique dans la superclasse et la classe enfant, on parle de substitution. Lorsque deux méthodes ou plus dans la même classe ont le même nom mais des paramètres différents, on parle de surcharge.

Comparaison entre la substitution et la surcharge

Overriding Overloading
Implements “runtime polymorphism” Implements “compile time polymorphism”
The method call is determined at runtime based on the object type The method call is determined at compile time
Occurs between superclass and subclass Occurs between the methods in the same class
Have the same signature (name and method arguments) Have the same name, but the parameters are different
On error, the effect will be visible at runtime On error, it can be caught at compile time

Exemple de substitution et de surcharge

Voici un exemple de surcharge et de substitution dans un programme Java :

package com.journaldev.examples;

import java.util.Arrays;

public class Processor {

	public void process(int i, int j) {
		System.out.printf("Processing two integers:%d, %d", i, j);
	}

	public void process(int[] ints) {
		System.out.println("Adding integer array:" + Arrays.toString(ints));
	}

	public void process(Object[] objs) {
		System.out.println("Adding integer array:" + Arrays.toString(objs));
	}
}

class MathProcessor extends Processor {

	@Override
	public void process(int i, int j) {
		System.out.println("Sum of integers is " + (i + j));
	}

	@Override
	public void process(int[] ints) {
		int sum = 0;
		for (int i : ints) {
			sum += i;
		}
		System.out.println("Sum of integer array elements is " + sum);
	}

}

Substitution

La méthode process() et les paramètres int i, int j dans Processor sont redéfinis dans la classe enfant MathProcessor. Ligne 7 et ligne 23:

public class Processor {

    public void process(int i, int j) { /* ... */ }

}

/* ... */

class MathProcessor extends Processor {
 
    @Override
    public void process(int i, int j) {  /* ... */ }

}

Et la méthode process() et int[] ints dans Processor sont également redéfinis dans la classe enfant. Ligne 11 et ligne 28:

public class Processor {

    public void process(int[] ints) { /* ... */ }

}

/* ... */

class MathProcessor extends Processor {

    @Override
    public void process(Object[] objs) { /* ... */ }

}

Surchargement

La méthode process() est surchargée dans la classe Processor. Lignes 7, 11 et 15:

public class Processor {

    public void process(int i, int j) { /* ... */ }

    public void process(int[] ints) { /* ... */ }

    public void process(Object[] objs) { /* ... */ }

}

Conclusion

Dans cet article, nous avons couvert le remplacement et la surcharge en Java. Le remplacement se produit lorsque la signature de la méthode est la même dans la superclasse et la classe enfant. La surcharge se produit lorsque deux méthodes ou plus dans la même classe ont le même nom mais des paramètres différents.

Source:
https://www.digitalocean.com/community/tutorials/overriding-vs-overloading-in-java