Maison >Java >javaDidacticiel >Pouvons-nous instancier une classe abstraite en Java ?

Pouvons-nous instancier une classe abstraite en Java ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-07 10:57:16773parcourir

Can We Instantiate an Abstract Class in Java?

Pouvons-nous instancier une classe abstraite : une plongée plus approfondie

Dans la compréhension conventionnelle, les classes abstraites ne peuvent pas être instanciées. Mais une récente interview a fait apparaître une perspective différente. Examinons cette question intrigante avec un exemple pratique :

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

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

Contrairement aux notions traditionnelles, il est possible d'instancier une classe abstraite dans ce scénario. Cependant, il existe une différence subtile : au lieu d'instancier la classe abstraite elle-même, nous en créons une sous-classe anonyme.

Comprendre les sous-classes anonymes

Une sous-classe anonyme est une classe interne sans nom qui étend ou implémente une superclasse ou une interface spécifiée. Dans le code ci-dessus :

  • new My() crée une instance de la sous-classe anonyme qui étend My.
  • Le corps de classe {} nous permet de définir des méthodes et des champs spécifiquement pour cela instance.
  • m est une référence à l'instance de la sous-classe anonyme, accédant à son remplacement mymethod().

Validation par compilation

Pour vérifier ce comportement, pensez à compiler le code. Dans la sortie compilée, nous remarquerons :

  • My.class: Le bytecode de la classe abstraite.
  • Poly.class: Le bytecode de la classe englobante.
  • Poly$1.class : Le bytecode de la sous-classe anonyme.

La présence de Poly$1.class confirme l'instanciation d'une sous-classe anonyme, et non la classe abstraite elle-même.

Prise en charge de la spécification du langage Java

La spécification du langage Java (JLS) mentionne explicitement les sous-classes anonymes dans la section 15.9.1 : « La classe étant instanciée est la sous-classe anonyme. méthodes et champs. Cette nuance est un outil précieux pour comprendre et utiliser les concepts orientés objet de Java.

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