Maison >Java >javaDidacticiel >Pouvons-nous instancier une classe abstraite ? Une réponse révisée
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!