114 votes

Surcharge et surcharge

Quelle est la différence entre surcharge et surcharge.

3voto

Matt Points 173

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

2voto

Nurlan Points 514

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.

1voto

ramya choudary Points 11

Shadowing = maintient deux définitions au niveau de la classe dérivée et afin de projeter la définition de la classe de base, elle masque la définition de la classe dérivée et vice versa.

1voto

La surcharge est le concept dans lequel vous avez les mêmes signatures ou méthodes avec le même nom mais des paramètres différents et la surcharge, nous avons des méthodes de même nom avec des paramètres différents ont également l'héritage est connu comme la surcharge.

1voto

Learning Bee Points 65

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X