Comment instancier une classe abstraite en Java ?
Une classe abstraite est une classe déclarée en Java via le mot clé "Abstract". Les classes abstraites sont un concept de l'un des quatre principes de la programmation orientée objet (POO) appelé « héritage ». L'héritage fait référence à une fonctionnalité des classes Java dans laquelle une classe appelée « sous-classe » hérite de toutes les propriétés de la classe. La classe parent est souvent appelée « superclasse ».
En Java, une classe abstraite fait référence à une super classe de base dont d'autres sous-classes peuvent hériter. Il peut contenir des méthodes abstraites et non abstraites.
Algorithme
Étape 1 - Identifiez les méthodes de la classe qui ont une implémentation par défaut ou aucune implémentation.
Étape 2 - Supprimez l'implémentation de ces méthodes.
Étape 3 - Ajoutez le mot-clé abstract à la déclaration de classe.
Étape 4 - Ajoutez le mot-clé abstract à la déclaration de méthode modifiée à l'étape 2.
Étape 5 - Si la classe a des variables d'instance qui doivent être initialisées, ajoutez un constructeur pour les initialiser.
Étape 6 - Mettez à jour toutes les sous-classes de la classe abstraite pour implémenter des méthodes abstraites ou se rendre abstraites.
Grammaire
Regardons la syntaxe d'instanciation des classes abstraites en Java -
// Abstract Class abstract class Shape { public abstract void draw(); }
Méthode
Les classes abstraites étant des classes incomplètes, elles ne peuvent pas être instanciées directement à l'aide du mot-clé "new".
Sous-classes concrètes - Afin d'instancier correctement une classe abstraite ambiguë ou incomplète, il existe une option permettant d'utiliser une sous-classe concrète. En s'étendant de manière transparente à partir de cette abstraction parent et en implémentant chacune de ses exigences de méthode, les utilisateurs peuvent créer et implémenter avec succès cette sous-classe nouvellement instanciée sans erreurs ni incohérences dans son fonctionnement.
Expressions Lambda - Pour créer des objets à partir de classes abstraites, vous avez une autre option : utiliser des expressions lambda qui fournissent des implémentations pour toutes ses abstractions. Cette création lambda est ensuite affectée à une variable d'interface fonctionnelle compatible basée sur ces signatures.
Cours abstrait instantané
Voyons un exemple d'extrait de code pour comprendre l'utilisation des classes abstraites. Le premier scénario fournit du code avec des classes non abstraites.
Exemple
class Shape { public void printName() { System.out.println("I'm a shape"); } public float area() { return 0; } public void printDetails() { this.printName(); System.out.println("... and my area is " + this.area()); } } class Circle extends Shape { private float radius; public Circle(float radius) { this.radius = radius; } public void printName() { System.out.println("I'm a circle"); } public float area() { return (float) (Math.PI * Math.pow(radius, 2)); } } class Rectangle extends Shape { private float length; private float width; public Rectangle(float length, float width) { this.length = length; this.width = width; } public void printName() { System.out.println("I'm a rectangle"); } public float area() { return length * width; } } public class Main { public static void main(String[] args) { Shape[] shapes = { new Circle(3.5f), new Rectangle(4.0f, 5.0f) }; for (Shape shape : shapes) { shape.printDetails(); } } }
Sortie
I'm a circle ... and my area is 38.48451 I'm a rectangle ... and my area is 20.0
Les classes Circle et Rectangle héritent des méthodes printName(), Area() et printDetails() de la superclasse "Shape". Cependant, aucune des deux classes ne remplace la méthode Area() pour fournir sa propre implémentation.
En appelant la méthode printDetails() de l'objet Circle, le résultat sera "Je suis un cercle... et mon aire est 38,48451". De même, appeler la méthode printDetails() sur un objet Rectangle affichera "Je suis un rectangle... et ma surface est de 20,0". Cela garantit que le résultat reflète la forme correcte et sa zone correspondante en fonction de la mise en œuvre spécifique fournie dans chaque cours
Exemple 1 : Sous-classe de béton
// With abstract class abstract class Shape { public abstract void printName(); public abstract float area(); public void printDetails() { this.printName(); System.out.println("... and my area is " + this.area()); } } // Concrete class class Circle extends Shape { private float radius; public Circle(float radius) { this.radius = radius; } public void printName() { System.out.print("I'm a circle"); } public float area() { return (float) (Math.PI * Math.pow(radius, 2)); } } // Concrete class class Rectangle extends Shape { private float length; private float width; public Rectangle(float length, float width) { this.length = length; this.width = width; } public void printName() { System.out.print("I'm a rectangle"); } public float area() { return length * width; } } // Main class public class Main { public static void main(String[] args) { Shape[] shapes = { new Circle(10), new Rectangle(5, 10) }; for (Shape shape : shapes) { shape.printDetails(); } } }
Sortie
I'm a circle... and my area is 314.15927 I'm a rectangle... and my area is 50.0
Dans le code mis à jour ci-dessus, les classes Circle et Rectangle implémentent les méthodes abstraites printName() et Area() définies dans la classe abstraite "Shape". La méthode printDetails() de la classe Shape peut utiliser ces méthodes pour imprimer les noms de formes et leurs régions respectives.
En faisant de Shape une classe abstraite et en définissant des méthodes abstraites, nous garantissons que toute classe qui étend la classe Shape doit fournir sa propre implémentation pour les méthodes printName() et Area().
Exemple 2 : expression lambda
interface Nameable { String getName(); } abstract class Shape { private Nameable nameable; public Shape(Nameable nameable) { this.nameable = nameable; } public abstract float area(); public void printDetails() { System.out.println("I'm a " + nameable.getName() + " ... and my area is " + this.area()); } } class Circle extends Shape { private float radius; public Circle(float radius) { super(() -> "circle"); this.radius = radius; } @Override public float area() { return (float) (Math.PI * Math.pow(radius, 2)); } } class Rectangle extends Shape { private float width; private float height; public Rectangle(float width, float height) { super(() -> "rectangle"); this.width = width; this.height = height; } @Override public float area() { return width * height; } } public class Main { public static void main(String[] args) { Shape[] shapes = { new Circle(10), new Rectangle(5, 10) }; for (Shape shape : shapes) { shape.printDetails(); } } }
Sortie
I'm a circle ... and my area is 314.15927 I'm a rectangle ... and my area is 50.0
Dans la dernière mise à jour de ce code, nous avons introduit une manière améliorée de spécifier Shape en tant que classe abstraite tout en internalisant sa fonction getName(). Une autre amélioration consiste à intégrer la méthode printName, qui utilise avec succès les données de getName() pour afficher le nom de chaque forme correspondante. Pour les sous-classes Circle et Rectangle, elles remplacent désormais le getName correspondant à l'aide d'une expression lambda afin que la forme attendue soit identifiée avec précision.
Conclusion
En résumé, une classe abstraite ne peut être instanciée que via sa sous-classe de base, pas directement. Il s’agit d’un concept hérité.
La raison principale derrière cela est qu'une classe abstraite n'est pas une implémentation complète de ses méthodes et objets, mais est utilisée par les sous-classes pour en hériter.
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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Guide du nombre parfait en Java. Nous discutons ici de la définition, comment vérifier le nombre parfait en Java ?, des exemples d'implémentation de code.

Guide de Weka en Java. Nous discutons ici de l'introduction, de la façon d'utiliser Weka Java, du type de plate-forme et des avantages avec des exemples.

Guide du nombre de Smith en Java. Nous discutons ici de la définition, comment vérifier le numéro Smith en Java ? exemple avec implémentation de code.

Dans cet article, nous avons conservé les questions d'entretien Java Spring les plus posées avec leurs réponses détaillées. Pour que vous puissiez réussir l'interview.

Java 8 présente l'API Stream, fournissant un moyen puissant et expressif de traiter les collections de données. Cependant, une question courante lors de l'utilisation du flux est: comment se casser ou revenir d'une opération FOREAK? Les boucles traditionnelles permettent une interruption ou un retour précoce, mais la méthode Foreach de Stream ne prend pas directement en charge cette méthode. Cet article expliquera les raisons et explorera des méthodes alternatives pour la mise en œuvre de terminaison prématurée dans les systèmes de traitement de flux. Lire plus approfondie: Améliorations de l'API Java Stream Comprendre le flux Forach La méthode foreach est une opération terminale qui effectue une opération sur chaque élément du flux. Son intention de conception est

Guide de TimeStamp to Date en Java. Ici, nous discutons également de l'introduction et de la façon de convertir l'horodatage en date en Java avec des exemples.

Les capsules sont des figures géométriques tridimensionnelles, composées d'un cylindre et d'un hémisphère aux deux extrémités. Le volume de la capsule peut être calculé en ajoutant le volume du cylindre et le volume de l'hémisphère aux deux extrémités. Ce tutoriel discutera de la façon de calculer le volume d'une capsule donnée en Java en utilisant différentes méthodes. Formule de volume de capsule La formule du volume de la capsule est la suivante: Volume de capsule = volume cylindrique volume de deux hémisphères volume dans, R: Le rayon de l'hémisphère. H: La hauteur du cylindre (à l'exclusion de l'hémisphère). Exemple 1 entrer Rayon = 5 unités Hauteur = 10 unités Sortir Volume = 1570,8 unités cubes expliquer Calculer le volume à l'aide de la formule: Volume = π × r2 × h (4

Java est un langage de programmation populaire qui peut être appris aussi bien par les développeurs débutants que par les développeurs expérimentés. Ce didacticiel commence par les concepts de base et progresse vers des sujets avancés. Après avoir installé le kit de développement Java, vous pouvez vous entraîner à la programmation en créant un simple programme « Hello, World ! ». Une fois que vous avez compris le code, utilisez l'invite de commande pour compiler et exécuter le programme, et « Hello, World ! » s'affichera sur la console. L'apprentissage de Java commence votre parcours de programmation et, à mesure que votre maîtrise s'approfondit, vous pouvez créer des applications plus complexes.
