Table des matières
Algorithme
Grammaire
Méthode
Cours abstrait instantané
Exemple
Sortie
Exemple 1 : Sous-classe de béton
Exemple 2 : expression lambda
Conclusion
Maison Java javaDidacticiel Comment instancier une classe abstraite en Java ?

Comment instancier une classe abstraite en Java ?

Aug 28, 2023 pm 11:45 PM
java classe abstraite instancier

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();
}
Copier après la connexion

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();
      }
   }
}
Copier après la connexion

Sortie

I'm a circle
... and my area is 38.48451
I'm a rectangle
... and my area is 20.0
Copier après la connexion

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();
      }
   }
}
Copier après la connexion

Sortie

I'm a circle... and my area is 314.15927
I'm a rectangle... and my area is 50.0
Copier après la connexion

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();
      }
   }
}
Copier après la connexion

Sortie

I'm a circle ... and my area is 314.15927
I'm a rectangle ... and my area is 50.0
Copier après la connexion

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!

Déclaration de ce site Web
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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

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 !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

Nombre parfait en Java Nombre parfait en Java Aug 30, 2024 pm 04:28 PM

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.

Weka en Java Weka en Java Aug 30, 2024 pm 04:28 PM

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.

Numéro de Smith en Java Numéro de Smith en Java Aug 30, 2024 pm 04:28 PM

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.

Questions d'entretien chez Java Spring Questions d'entretien chez Java Spring Aug 30, 2024 pm 04:29 PM

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.

Break or Return of Java 8 Stream Forach? Break or Return of Java 8 Stream Forach? Feb 07, 2025 pm 12:09 PM

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

Horodatage à ce jour en Java Horodatage à ce jour en Java Aug 30, 2024 pm 04:28 PM

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.

Programme Java pour trouver le volume de la capsule Programme Java pour trouver le volume de la capsule Feb 07, 2025 am 11:37 AM

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

Créer l'avenir : programmation Java pour les débutants absolus Créer l'avenir : programmation Java pour les débutants absolus Oct 13, 2024 pm 01:32 PM

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.

See all articles