Quelle est la différence entre surcharge et surcharge.
Réponses
Trop de publicités?Avoir plus d'une méthode/constructeur avec le même nom mais des paramètres différents est appelé surcharge. C'est un événement qui se produit au moment de la compilation.
Class Addition
{
int add(int a, int b)
{
return a+b;
}
int add(int a, int b, int c)
{
return a+b+c;
}
public static main (String[] args)
{
Addition addNum = new Addition();
System.out.println(addNum.add(1,2));
System.out.println(addNum.add(1,2,3));
}
}
O/p :
3
6
La substitution est un événement d'exécution, ce qui signifie que la sortie est modifiée au moment de l'exécution en fonction de votre code.
class Car
{
public int topSpeed()
{
return 200;
}
}
class Ferrari extends Car
{
public int topSpeed()
{
return 400;
}
public static void main(String args[])
{
Car car = new Ferrari();
int num= car.topSpeed();
System.out.println("Top speed for this car is: "+num);
}
}
Remarquez qu'il y a une méthode commune aux deux classes topSpeed(). Comme nous avons instancié une Ferrari, nous obtenons un résultat différent.
O/p :
Top speed for this car is: 400
En C#, il n'y a pas de Java comme caché déroger, sans mot-clé contourner sur les méthodes de surcharge, voir ces implémentations C# :
variante 1 sans contourner Le résultat est de 200
class Car {
public int topSpeed() {
return 200;
}
}
class Ferrari : Car {
public int topSpeed(){
return 400;
}
}
static void Main(string[] args){
Car car = new Ferrari();
int num= car.topSpeed();
Console.WriteLine("Top speed for this car is: "+num);
Console.ReadLine();
}
variante 2 avec contourner mot-clé : le résultat est 400
class Car {
public virtual int topSpeed() {
return 200;
}
}
class Ferrari : Car {
public override int topSpeed(){
return 400;
}
}
static void Main(string[] args){
Car car = new Ferrari();
int num= car.topSpeed();
Console.WriteLine("Top speed for this car is: "+num);
Console.ReadLine();
}
mot-clé virtuel sur la classe Car est opposé pour final sur Java, signifie non définitif vous pouvez le remplacer, ou l'implémenter si Car était abstrait.
Un autre point à ajouter.
Surcharge de travail Plus d'une méthode avec le même nom. Un type de retour identique ou différent. Nombre différent de paramètres ou type différent de paramètres. Dans la même classe ou dans une classe dérivée.
int Add(int num1, int num2) int Add(int num1, int num2, int num3) double Add(int num1, int num2) double Add(double num1, double num2)
Peut être possible dans la même classe ou dans une classe dérivée. En général, il est préférable que ce soit dans la même classe. Par exemple, Console.WriteLine() possède 19 méthodes surchargées.
Peut surcharger les constructeurs de classe, les méthodes.
Peut être considéré comme un polymorphisme de temps de compilation (statique / Early Binding).
\=====================================================================================================
Remplacement de ne peut être possible dans la même classe. Peut remplacer les méthodes, les propriétés, les indexeurs et les événements de la classe.
A quelques limitations comme La méthode de base surchargée doit être virtuelle, abstraite ou surchargée. Vous ne pouvez pas utiliser les modificateurs new, static ou virtual pour modifier une méthode prioritaire.
Peut être considéré comme un polymorphisme à l'exécution (dynamique / liaison tardive).
Aide à la gestion des versions http://msdn.microsoft.com/en-us/library/6fawty39.aspx
\=====================================================================================================
Liens utiles
http://msdn.microsoft.com/en-us/library/ms173152.aspx Polymorphisme à la compilation et polymorphisme à l'exécution