Maison >Java >javaDidacticiel >Comment puis-je accéder aux méthodes de sous-classe à partir d'une superclasse en Java ?

Comment puis-je accéder aux méthodes de sous-classe à partir d'une superclasse en Java ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-07 10:04:12783parcourir

How Can I Access Subclass Methods from a Superclass in Java?

Appel de méthodes de sous-classe à partir d'une superclasse

Problème

En Java, lors de l'héritage de classes et de la création de sous-classes, il est courant de rencontrer des problèmes d'accès aux méthodes spécifiques aux sous-classes au sein de la superclasse. Cela se produit lorsque vous instanciez un objet de sous-classe et l'attribuez à une variable de superclasse.

Solution

Pour résoudre cette limitation, vous pouvez utiliser l'une des méthodes suivantes :

  • Déclarez la variable comme dérivée class :
Cat cat = new Cat("Feline", 12, "Orange");
cat.getName(); // OK
cat.getColor(); // OK (getColor() is in Cat)
  • Convertissez la variable dans le type de béton souhaité :
Pet pet = new Cat("Feline", 12, "Orange");
((Cat)pet).getName(); // OK
((Cat)pet).getColor(); // OK (explicitly treated as Cat)

Lorsque vous effectuez une distribution, vous traitez temporairement l'objet comme une instance du type spécifié. Cela vous permet d'accéder aux membres et aux méthodes spécifiques à la sous-classe.

Exemple

Considérez la classe Main modifiée suivante :

public class Kennel {
    public static void main(String[] args) {
        // Create the pet objects
        Cat cat = new Cat("Feline", 12, "Orange");
        Pet dog = new Dog("Spot", 14, "Dalmatian");
        Pet bird = new Bird("Feathers", 56, 12);

        // Print out the status of the animals
        System.out.println("I have a cat named " + cat.getName()
                + ". He is " + cat.getAge() + " years old."
                + " He is " + cat.getColor()
                + ". When he speaks he says " + cat.speak());

        // Using a cast to access a subclass-specific method
        ((Cat)dog).getBreed(); // dog is treated as Cat to access getBreed()
        System.out.println("I also have a dog named " + dog.getName()
                + ". He is " + dog.getAge() + " years old."
                + " He is a " + ((Cat)dog).getBreed()
                + ". When he speaks he says " + dog.speak());

        System.out.println("And Finally I have a bird named "
                + bird.getName() + ". He is " + bird.getAge() + " years old."
                + " He has a wingspan of " + bird.getWingspan() + " inches."
                + " When he speaks he says " + bird.speak());
    }
}

Dans cet exemple, la classe Main récupère avec succès la race du chien à l'aide d'un plâtre.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn