Les programmes Java utilisent des classes abstraites pour implémenter des concepts abstraits dans la nature. La fonction d'une classe abstraite est d'organiser ensemble de nombreuses classes liées pour fournir une classe commune, c'est-à-dire une classe abstraite, et les classes spécifiques qu'elle organise en dériveront en tant que sous-classes. Une classe abstraite caractérise le comportement public et le transfère à ses classes dérivées via le mécanisme d'héritage. Les méthodes définies dans les classes abstraites sont appelées méthodes abstraites. Ces méthodes n'ont que la déclaration de l'en-tête de la méthode et utilisent un point-virgule pour remplacer la définition du corps de la méthode, c'est-à-dire que seule la forme d'interface de la méthode membre est définie sans opérations spécifiques. . Seule la redéfinition des méthodes membres abstraites par une classe dérivée implémente réellement les opérations liées à la classe dérivée.
Une fois que chaque sous-classe hérite de la méthode abstraite de la classe parent, elle la redéfinit avec différentes instructions et corps de méthode, formant plusieurs sous-classes avec le même nom, la même valeur de retour et la même liste de paramètres, avec le même objectif mais certaines différences spécifiques. méthode de mise en œuvre. Le but de la définition de méthodes abstraites dans une classe abstraite est d'implémenter une interface, c'est-à-dire que toutes les sous-classes présentent une méthode portant le même nom au monde extérieur. Une classe abstraite est une collection d'attributs publics de toutes ses sous-classes et une classe qui contient une ou plusieurs méthodes abstraites. L'un des grands avantages de l'utilisation de classes abstraites est que vous pouvez utiliser pleinement ces propriétés publiques pour améliorer l'efficacité du développement et de la maintenance des programmes. Les restrictions sur les classes abstraites et les méthodes abstraites sont les suivantes :
(1) Toute classe modifiée avec le modificateur abstrait est appelée une classe abstraite. Toute méthode membre modifiée avec le modificateur abstract est appelée une méthode abstraite.
(2) Une classe abstraite peut avoir zéro ou plusieurs méthodes abstraites, ou elle peut également contenir des méthodes non abstraites.
(3) Il n'y a pas besoin de méthodes abstraites dans les classes abstraites, mais les classes avec des méthodes abstraites doivent être des classes abstraites.
(4) Pour les méthodes abstraites, seuls le nom de la méthode et son type sont spécifiés dans la classe abstraite sans écrire son code d'implémentation.
(5) Une classe abstraite peut dériver des sous-classes, et toutes les méthodes abstraites définies dans la classe abstraite doivent être implémentées dans les sous-classes dérivées de la classe abstraite.
(6) Les classes abstraites ne peuvent pas créer d'objets. Le travail de création d'objets est implémenté par des sous-classes dérivées de classes abstraites.
(7) S'il existe une méthode abstraite portant le même nom dans la classe parent, il ne peut pas y avoir d'autre méthode abstraite portant le même nom dans la sous-classe.
(8) abstract ne peut pas modifier la même classe en parallèle avec final.
(9) abstract ne peut pas être utilisé pour modifier la même méthode en parallèle avec private, static, final ou native.
Le langage Java stipule que lorsqu'une classe possède une méthode abstraite, elle doit être déclarée comme classe abstraite.
Lorsqu'une sous-classe hérite d'une classe parent, s'il y a des méthodes abstraites dans la classe parent et que la sous-classe estime qu'elle peut implémenter toutes les méthodes abstraites de la classe parent, alors la sous-classe doit implémenter toutes les méthodes abstraites de la classe parent, tel que:
/** * La sous-classe Dog hérite de la classe abstraite Animal et implémente la méthode abstraite Enjoy * @author gacl * */class Dog extends Animal { /** * La classe Dog ajoute ses propres attributs uniques*/ public String furColor public Dog; ( String n, String c) { super(n);//Appelle le constructeur de la classe parent Animal this.furColor = c; } @Override public void Enjoy() { System.out.println("Le chien aboie.. .." ); }}
Si la méthode abstraite de la classe parent ne peut pas être implémentée par la sous-classe, déclarez la sous-classe comme classe abstraite, par exemple :
/** * La sous-classe Cat hérite ici de la classe abstraite Animal, et hérite naturellement de la méthode abstraite Enjoy() déclarée dans la classe Animal * Cependant, la sous-classe Cat estime qu'il n'est pas approprié d'implémenter cette méthode Enjoy() par. lui-même, donc il se déclare comme une classe abstraite, * Ensuite, celui qui implémente cette méthode abstraite Enjoy, et celui qui hérite d'une sous-classe, alors celui qui implémente cette méthode abstraite Enjoy(). * @author gacl * */abstract class Cat extends Animal { /** * Cat ajoute ses propres attributs uniques*/ public String eyeColor; public Cat(String n, String c) { super(n);//Appelle la classe parent Méthode de construction de l'animal this.eyeColor = c }}
La sous-classe Cat hérite ici de la classe abstraite Animal, et hérite naturellement de la méthode abstraite Enjoy() déclarée dans la classe Animal. Cependant, la sous-classe Cat estime qu'il n'est pas approprié d'implémenter cette méthode Enjoy() seule, elle le fait donc. s'appelle Déclaré comme une classe abstraite, alors celui qui implémente la méthode abstraite Enjoy, et celui qui hérite de la sous-classe, implémente alors la méthode abstraite Enjoy(). comme:
/** * La sous-classe BlueCat hérite de la classe abstraite Cat et implémente la méthode abstraite Enjoy héritée de la classe parent Cat * @author gacl * */class BlueCat extends Cat { public BlueCat(String n, String c) { super(n , c); } /** * Implémente la méthode abstraite Enjoy */ @Override public void Enjoy() { System.out.println("Le chat bleu miaule..." } }
Le code de test complet est le suivant :
package javastudy.summary;/** * Classe parent Animal * Ajoutez un résumé devant la classe, c'est-à-dire déclarez-le comme ceci : abstract class Animal * De cette façon, la classe Animal devient une classe abstraite */abstract class Animal { public String name; public Animal(String name) { this.name = name; } /** * Méthode abstraite * Il n'y a que la définition de la méthode, mais aucune implémentation de la méthode. */ public abstract void Enjoy(); }/** * La sous-classe Cat hérite ici de la classe abstraite Animal, et hérite naturellement de la méthode abstraite Enjoy() déclarée dans la classe Animal, * mais la sous-classe Cat estime que cela doit être implémentée par elle-même Cette méthode Enjoy() est également inappropriée, elle se déclare donc comme une classe abstraite. * Ensuite, celui qui implémente cette méthode abstraite Enjoy, et celui qui hérite d'une sous-classe, alors celui qui implémente cette méthode abstraite Enjoy(). * @author gacl * */abstract class Cat extends Animal { /** * Cat ajoute ses propres attributs uniques*/ public String eyeColor; public Cat(String n, String c) { super(n);//Appelle la classe parent Méthode de construction d'Animal this.eyeColor = c; }}/** * La sous-classe BlueCat hérite de la classe abstraite Cat et implémente la méthode abstraite Enjoy héritée de la classe parent Cat * @author gacl * */class BlueCat extends Cat { public BlueCat(String n, String c) { super(n, c); } /** * Implémente la méthode abstraite Enjoy */ @Override public void Enjoy() { System.out.println("Blue Cat miaule. .."); } }/** * La sous-classe Dog hérite de la classe abstraite Animal et implémente la méthode abstraite Enjoy * @author gacl * */class Dog extends Animal { /** * La classe Dog ajoute ses propres attributs uniques * /chaîne publique furColor; public Dog(String n, String c) { super(n);//Appelle le constructeur de la classe parent Animal this.furColor = c; } @Override public void Enjoy() { System.out.println("Dog aboie ...."); }} public class TestAbstract { /** * @param args */ public static void main(String[] args) { /** * Une fois que la classe Cat est déclarée comme classe abstraite, la classe Cat ne peut pas être instanciée. * Comme la classe abstraite est incomplète et qu'il manque des bras et des jambes, la classe abstraite ne peut pas être instanciée. */ //Cat c = new Cat("Catname","blue"); Dog d = new Dog("dogname","black");//Appelez la méthode Enjoy BlueCat que vous avez implémentée c = new BlueCat("BlueCatname","blue"); c.enjoy();//Appelez la méthode Enjoy que vous avez implémentée}}