Appel de méthodes de sous-classe à partir d'une superclasse : compréhension de la compatibilité des types
Lorsque vous travaillez avec l'héritage dans la programmation orientée objet, l'accès aux méthodes spécifiques aux sous-classes de une variable de superclasse peut être difficile. En effet, par défaut, une variable déclarée comme type de superclasse ne peut accéder qu'aux méthodes publiques et aux variables membres qui existent dans la superclasse.
Pour illustrer cela, considérons l'exemple de code fourni dans la question. Ici, une superclasse Pet est définie avec des propriétés et des méthodes communes comme le nom et l'âge. Trois sous-classes, Chien, Chat et Oiseau, héritent de Animal de compagnie et introduisent des traits et des méthodes uniques pour chaque type d'animal.
Au sein de la classe principale Kennel, l'utilisateur tente d'accéder au méthodes spécifiques aux sous-classes, telles que cat.getColor(), dog.getBreed() et bird.getWingspan(), qui sont uniques à Chat, Chien et Oiseau, respectivement. Cependant, ces méthodes ne sont pas accessibles car cat, dog et bird sont déclarées comme instances de la superclasse Pet.
Pour résoudre ce problème, il existe deux options :
Déclarer les variables en tant que types de sous-classes concrètes :
Déclarer les variables en tant qu'instances spécifiques de la sous-classe. Par exemple :
Cat cat = new Cat("Feline", 12, "Orange"); Dog dog = new Dog("Spot", 14, "Dalmation"); Bird bird = new Bird("Feathers", 56, 12);
Transformer des variables en types de sous-classes concrètes :
Transformer une variable de superclasse vers le type de sous-classe attendu en utilisant l'opérateur de conversion ((())). Par exemple :
Pet pet = new Cat("Feline", 12, "Orange"); Cat cat = (Cat) pet;
Les deux approches permettent d'accéder aux méthodes et propriétés spécifiques aux sous-classes via les variables respectives.
En Java, le Le type d'une variable détermine les méthodes disponibles et les variables membres accessibles. En déclarant des variables en tant que sous-classes concrètes ou en les convertissant en types de sous-classes attendus, vous garantissez l'accès à la fonctionnalité souhaitée.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!