Classes abstraites en Java
Marquez une classe parente abstract lorsqu’elle doit laisser au moins une méthode sans corps pour que les enfants la remplissent. Écrivez abstract class Machine avec abstract void horn(); et une méthode normale park qui affiche park. Écrivez class Truck extends Machine et donnez à horn un corps qui affiche honk. Dans Yard.java, construisez un Truck, appelez t.horn(), puis appelez t.park(). Compilez avec javac Yard.java et exécutez java Yard. L’écran doit montrer honk, puis park. Une deuxième démo ajoute Car pour que deux enfants remplissent horn différemment. Laissez polymorphism pour la page suivante — cette leçon est la méthode parent inachevée et l’enfant qui la termine.
Remplissez la méthode abstract sur l’enfant
La page des enums a listé des noms fixes. Cette page laisse volontairement une méthode inachevée. Ouvrez Yard.java. Gardez le nom de classe public Yard. Supprimez les démos enum Level restantes si elles enterrent l’histoire abstract, les fichiers Signal / implements, les démos de chemin, et tout Scanner clavier. Le programme ne doit pas attendre la frappe. Vous n’avez pas besoin de ligne import.
Déclarez le parent abstract au-dessus des autres types :
abstract class Machine {
abstract void horn();
void park() {
System.out.println("park");
}
}
La méthode abstract se termine par un point-virgule et n’a pas de corps { }. La méthode normale park garde un corps complet pour que chaque enfant puisse la réutiliser.
Déclarez l’enfant avec extends Machine. Remplissez horn :
void horn() {
System.out.println("honk");
}
Vous devez remplir chaque méthode abstract listée sur le parent. Sur cette page, ce n’est que horn. N’écrivez pas new Machine() dans main — une classe abstract n’est pas construite comme objet seule.
Dans Yard.main :
Truck t = new Truck();
t.horn();
t.park();
Le premier appel exécute le corps sur Truck. Le second appel exécute le corps partagé sur Machine.
abstract class Machine {
abstract void horn();
void park() {
System.out.println("park");
}
}
class Truck extends Machine {
void horn() {
System.out.println("honk");
}
}
public class Yard {
public static void main(String[] args) {
Truck t = new Truck();
t.horn();
t.park();
}
}
Depuis le dossier qui contient Yard.java, exécutez javac Yard.java. Quand parenthèses, accolades et points-virgules correspondent, javac n’écrit aucune ligne à lui. Puis exécutez java Yard — pas java Yard.java. Laissez l’extension .java hors de la commande d’exécution. Gardez une classe publique dans le fichier pour que le nom corresponde à Yard. Les types aides Machine et Truck restent sans public sous cette forme débutant.
L’écran montre honk, puis park. Parcourez l’exécution une fois. Java démarre à Yard.main. new Truck() construit un truck qui a terminé le horn abstract. t.horn() affiche honk. t.park() affiche park depuis le corps parent qui existait déjà. La méthode inachevée n’a vécu que comme exigence jusqu’à ce que l’enfant écrive le corps.
Si javac refuse, vérifiez trois points. Premièrement, la ligne de classe parent doit dire abstract class Machine. Deuxièmement, la méthode inachevée doit dire abstract et se terminer par ;. Troisièmement, Truck doit vraiment écrire horn avec un corps. Si vous voyez encore MEDIUM d’un fichier enum, passez au fichier d’enseignement abstract et exécutez java Yard à nouveau. Si vous essayez new Machine(), javac refuse — c’est attendu sur cette page.
Dites la règle à voix haute en regardant l’écran : le parent abstract nomme la méthode manquante, l’enfant la remplit, les méthodes partagées s’exécutent encore. N’inventez pas encore une longue parade polymorphism de nombreuses variables typées parent. Cette histoire attend la leçon suivante.
Deux enfants remplissent horn différemment
Un second programme garde la même Machine abstract. Truck affiche encore honk. Un nouveau Car affiche beep. main construit les deux, appelle chaque horn, puis appelle park sur le truck.
abstract class Machine {
abstract void horn();
void park() {
System.out.println("park");
}
}
class Truck extends Machine {
void horn() {
System.out.println("honk");
}
}
class Car extends Machine {
void horn() {
System.out.println("beep");
}
}
public class Yard {
public static void main(String[] args) {
Truck t = new Truck();
Car c = new Car();
t.horn();
c.horn();
t.park();
}
}
Compilez avec javac Yard.java, puis exécutez java Yard. L’écran montre honk, puis beep, puis park. Chaque enfant a rempli le même nom abstract avec sa propre impression. Le corps partagé park vient encore de Machine. Vous n’écrivez toujours jamais new Machine().
Relisez le parent : une méthode abstract, une méthode normale. Relisez les enfants : chacun écrit horn, aucun ne réécrit park sur cette page. Cette séparation est le point d’enseignement. Si vous omettez horn sur Car alors que Car extends Machine, javac refuse car chaque méthode abstract doit être remplie.
Si des démos enum restantes restent proches, gardez-les comme histoire. Pour cette leçon, exécutez le fichier d’enseignement abstract pour que l’écran montre des remplissages de méthode, pas MEDIUM. Si javac se plaint de classes publiques en double, gardez seulement Yard publique.
Comparé aux enums et aux interfaces
Sur la page des enums, Level a listé des noms fixes. Sur la page des interfaces, implements a rempli des méthodes d’interface vides. Sur cette page, abstract class plus extends laisse une méthode de classe inachevée jusqu’à ce qu’un enfant écrive le corps. Vous compilez encore Yard.java et exécutez java Yard. Les nouveaux jetons sont abstract class, abstract void horn();, et un enfant qui fournit le corps tout en réutilisant park.
Si un fichier enum Level restant est encore ouvert, vous verrez des constantes et peut-être un switch. Passez au fichier abstract pour que le haut montre abstract class Machine et que main construise un Truck. Gardez hors de cette page les démos polymorphism qui ne font que déplacer des variables typées parent. Gardez hors de cette page la saisie clavier.
Ce que cette page laisse pour polymorphism
Cette page termine les méthodes abstract sur des enfants concrets. La page suivante montre polymorphism, où une variable typée parent peut tenir différents objets enfants et appeler le corps de méthode correspondant. Restez ici avec des parents abstract et des enfants remplis. N’exigez pas encore une liste de variables Machine qui pointent vers beaucoup d’enfants.
Quand vous écrirez plus tard des démos polymorphism, vous commencerez souvent encore depuis un nom de méthode parent abstract ou ordinaire. Traitez cette page comme la moitié méthode inachevée de cette histoire voisine. Terminez les deux démos Yard jusqu’à ce que honk puis park — puis honk, beep, park — semblent automatiques avant d’ouvrir la leçon polymorphism.
Avant polymorphism
Vous pouvez déclarer abstract class Machine, remplir horn sur Truck, et voir honk puis park. Vous pouvez ajouter Car avec son propre horn et voir honk, puis beep, puis park. Compilez Yard.java et exécutez java Yard pour chaque démo conservée à tour de rôle. L’enfant a terminé la méthode abstract. La page suivante est polymorphism, où les appels via une référence typée parent choisissent le corps de l’enfant.
Gardez la démo à un seul truck pour un remplissage abstract clair plus park partagé. Gardez la démo à deux enfants pour une paire claire de remplissages. Gardez hors de cette page les fichiers de parade polymorphism. Ces trois habitudes sont le point de contrôle avant d’avancer. Quand honk apparaît avant park après new Truck(), les classes abstract ont fait leur travail pour cette leçon et vous êtes prêt pour le sujet suivant sur polymorphism.
Un dernier passage dans le dossier : un Yard public, un Machine abstract, des enfants concrets qui remplissent horn, pas de new Machine(), pas d’attente clavier. Exécutez javac Yard.java et java Yard une fois de plus sur la démo que vous laissez ouverte. Si l’écran imprime encore les remplissages que vous avez écrits, le contrat abstract est solide et le cours peut passer à polymorphism sur la page suivante.
🧠 Testez Vos Connaissances
Testez Vos Connaissances
Mettez-vous au défi avec ce quiz interactif et voyez à quel point vous comprenez le sujet
📝 Instructions
- Lisez chaque question attentivement
- Sélectionnez la meilleure réponse pour chaque question
- Vous pouvez refaire le quiz autant de fois que vous le souhaitez
- Votre progression sera affichée en haut