Comprendre le concept d’inheritance en Java

Je viens de rafraîchir les fonctionnalités oups de la java. Donc, j’ai un peu de confusion en ce qui concerne le concept de succession. Pour cela, j’ai un exemple de code suivant:

class Super{ int index = 5; public void printVal(){ System.out.println("Super"); } } class Sub extends Super{ int index = 2; public void printVal(){ System.out.println("Sub"); } } public class Runner { public static void main(Ssortingng args[]){ Super sup = new Sub(); System.out.println(sup.index+","); sup.printVal(); } } 

Maintenant, le code ci-dessus me donne la sortie comme: 5, Sub.

Ici, nous redéfinissons la méthode printVal (), il est donc compréhensible qu’elle n’accède qu’à la méthode de la classe enfant.

Mais je ne comprenais pas pourquoi il accédait à la valeur de x de Super class …

Merci d’avance….

Les objects ont des types et les variables ont des types. Parce que tu as mis:

 Super sup = new Sub(); 

Maintenant, vous avez une variable sup de type Super qui fait référence à un object de type Sub .

Lorsque vous appelez une méthode sur un object, la méthode qui s’exécute est choisie en fonction du type de l’ object . C’est pourquoi il affiche “Sub” au lieu de “Super”.

Lorsque vous accédez à un champ dans un object, celui-ci est choisi en fonction du type de la variable , raison pour laquelle vous obtenez 5.

C’est ce qu’on appelle l’instance variable masquant – lien . En gros, vous avez deux variables distinctes et puisque le type de référence est Super il utilisera la variable d’ index de Super .

index est simplement un champ appartenant à la classe parente. Parce qu’il appartient à la classe parente, cela signifie que c’est un atsortingbut à tous les enfants. Pour simplement le concept:

Un animal de classe pourrait avoir un âge et un nom de champ. Toutes les sous-classes partageraient ces atsortingbuts, mais auraient un ou plusieurs champs supplémentaires, qui seraient contenus dans ces classes d’enfants uniquement. Par exemple, hairColour pourrait être le seul atsortingbut de la classe Dog, mais pas de la classe Snake, qui pourrait avoir un atsortingbut unique simple, venimeux.

Dans cette structure, tous les animaux ont un nom et un âge, ce qui pourrait définir les animaux en général. Chaque espèce possède des atsortingbuts supplémentaires qui lui sont propres et qui sont contenus dans leurs sous-classes respectives.

Votre code ne le montre pas clairement, car votre sous-classe n’a pas de constructeur, en fait, aucun appel de super constructeur. Comme expliqué par Petar, votre index d’ atsortingbut non privé est un access depuis la super classe.

Cela se produit car les fonctions coz suivent la liaison d’exécution, alors que les variables sont liées à la compilation.

Les variables dépendent donc du type de données de la référence alors que les fonctions dépendent de la valeur représentée par le type de données de la référence.

Lorsque nous affectons l’object de la sous-classe à l’object de la classe parente, seule la propriété commune à la fois à la classe peut être acceptée par l’object de la classe parente, elle est appelée découpage d’object. C’est pourquoi la valeur de la classe de brevets 5 est imprimée.