Maison >Java >javaDidacticiel >Pouvons-nous instancier une classe abstraite ? Une réponse révisée

Pouvons-nous instancier une classe abstraite ? Une réponse révisée

Patricia Arquette
Patricia Arquetteoriginal
2024-12-09 21:28:15658parcourir

Can We Instantiate an Abstract Class?  A Revised Answer

Pouvons-nous vraiment instancier une classe abstraite ?

Lors d'un entretien, une question courante se pose : "Pouvons-nous instancier une classe abstraite ?" La réponse traditionnelle est « Non », mais cette réponse est peut-être désormais dépassée.

L'énigme des classes anonymes

Pour faire la lumière sur cette énigme, approfondissons une compréhension révisée introduite par les sections 15.9.1 et 12.5 de la spécification du langage Java (JLS). Plus précisément, lorsqu'une expression de création d'instance de classe se termine par un corps de classe, une sous-classe anonyme est déclarée. Par conséquent, la classe instanciée devient la sous-classe anonyme, et non la classe abstraite elle-même.

Démonstration pratique

Pour illustrer ce concept, considérons le code suivant :

abstract class My {
    public void myMethod() {
        System.out.print("Abstract");
    }
}

class Poly {
    public static void main(String[] a) {
        My m = new My() {};
        m.myMethod();
    }
}

Lors de la compilation de ce code, vous remarquerez la création du fichier My$1.class, correspondant à la sous-classe anonyme générée pour la classe anonyme instanciation effectuée via new My() {}.

Conclusion

Ainsi, la réponse à la question "Peut-on instancier une classe abstraite ?" a évolué. Bien que nous ne puissions pas instancier directement des classes abstraites, nous pouvons créer des instances de leurs sous-classes anonymes, qui se comportent comme des instances de la classe abstraite, nous permettant d'invoquer des méthodes et d'accéder aux propriétés au sein de la classe abstraite.

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