2 votes

Quelle est la meilleure utilisation de l'héritage autre que la réduction du code redondant ?

Quelle est la meilleure utilisation de l'héritage, si ce n'est qu'il réduit le code redondant !
Prenons un exemple
Classe A : Classe de base
Classe B : Sous-classe
et de la classe C.

 CLASS A
    ^
    |                And     CLASS C
    |
    |
  CLASS B

Je peux utiliser des méthodes de la classe A, dans la classe B par héritage.
de la même manière, je peux utiliser les méthodes de la classe A, dans la classe C,
en créant une instance de la classe A. (disons que A est Public)
en utilisant l'héritage, réduire seulement la création d'un nouvel objet/Instance ?
Aidez-moi à mieux comprendre !

0voto

Tudor Points 39539

Le polymorphisme est un grand avantage. Si les classes B et C héritent toutes deux de A, chaque fois qu'un objet de type A est requis, il peut être remplacé soit par un objet de type B, soit par un objet de type C. En supposant que les méthodes correspondantes soient surchargées dans B et C, cela est très pratique pour obtenir un comportement différent selon l'objet que vous passez.

Exemple :

class A {
    public void foo() { System.out.println("A"); }
}

class B extends A {
    public void foo() { System.out.println("B"); }
}

class C extends A {
    public void foo() { System.out.println("C"); }
}

Ensuite :

public static void printMessage(A obj) {
    obj.foo();
}

public static void main(String[] args) {
    A b = new B();
    printMessage(b); // prints 'B'
    A c = new C();
    printMessage(c); // prints 'C'
}

0voto

Jon Skeet Points 692016

Le point principal de l'héritage est le polymorphisme : permettre autre pour utiliser une instance de ClassB sachant seulement qu'il peut être utilisé comme un ClassA .

Mon exemple préféré est celui des flux : je pourrais facilement écrire un copyStream méthode prenant un InputStream et un OutputStream par exemple, en utilisant uniquement les méthodes déclarées sur ces types. Je pourrais alors copier un FileInputStream à un ByteArrayOutputStream ou d'utiliser des flux liés au réseau, etc., le tout sans modifier le code de l'application copyStream méthode.

0voto

Luchian Grigore Points 136646

La principale raison d'utiliser l'héritage n'est pas de supprimer le code redondant.

L'héritage et toute la magie rendue possible est un point clé et central de la POO. L'extension d'une classe ne vous permet pas seulement d'utiliser ses fonctionnalités, mais aussi de les modifier (par polimorphisme) et d'en ajouter d'autres.

0voto

ceorron Points 347

La différence vient de la nécessité de comprendre la capacité de faire passer la classe B dans des fonctions qui agissent sur la classe A. En ce sens, B est un type de A, alors que la classe C a ou possède A. La différence est faible et n'est significative que dans certaines circonstances.

Cela ne veut pas dire que la différence est souvent explicitée dans le code. Souvent, les gens héritent quand ils veulent vraiment être propriétaires et parfois ils le sont quand un objet est vraiment un type de quelque chose d'autre.

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