La classe qui hérite d'une classe abstract, doit être abstract ?
Résolu
estrellas6
Messages postés
37
Statut
Membre
-
estrellas6 Messages postés 37 Statut Membre -
estrellas6 Messages postés 37 Statut Membre -
Bonjour,
je suis en train de suivre le tutoriel de site du zéro "Apprenez à programmer en Java".
Dans la partie "classe abstraite et interface" plus précisément "étoffons notre classe", j'ai recopié le code proposé par le site où il déclare les classes (chat, chien, loup, tigre et lion) qui héritent d'une classe abstract (canin et félin) comme des classes public.
Le problème c'est que éclipse me demande de les convertir en "abstract" et à cause de ça j'ai un problème de compilation.
Alors c quoi la solution ?
et merci :)
je suis en train de suivre le tutoriel de site du zéro "Apprenez à programmer en Java".
Dans la partie "classe abstraite et interface" plus précisément "étoffons notre classe", j'ai recopié le code proposé par le site où il déclare les classes (chat, chien, loup, tigre et lion) qui héritent d'une classe abstract (canin et félin) comme des classes public.
Le problème c'est que éclipse me demande de les convertir en "abstract" et à cause de ça j'ai un problème de compilation.
Alors c quoi la solution ?
et merci :)
A voir également:
- La classe qui hérite d'une classe abstract, doit être abstract ?
- Classe ram - Guide
- Dans le code de la page, modifiez la couleur de fond de la classe .pix. un code de 4 chiffres doit apparaître dans la grille. lequel ? ✓ - Forum Excel
- Bluetooth mercedes classe a 2005 - Forum Autoradio
- Ouvrez cette page. dans le code de la page, modifiez la couleur de fond de la classe .pix. un code de 4 chiffres doit apparaître dans la grille. lequel ? - Forum HTML
- Bluetooth mercedes classe a - Forum Autoradio
6 réponses
À quel moment as tu un problème avec Eclipse ?
Au final le code source que tu dois avoir est :
Et l'exécution de la classe Test donne ce résultat :
Au final le code source que tu dois avoir est :
public abstract class Animal { protected String couleur; protected int poids; protected void manger() { System.out.println("Je mange de la viande."); } protected void boire() { System.out.println("Je bois de l'eau !"); } abstract void deplacement(); abstract void crier(); public String toString() { String str = "Je suis un objet de la " + this.getClass() + ", je suis " + this.couleur + ", je pèse " + this.poids; return str; } } public abstract class Felin extends Animal { void deplacement() { System.out.println("Je me déplace seul !"); } } public abstract class Canin extends Animal { void deplacement() { System.out.println("Je me déplace en meute !"); } } public class Chien extends Canin { public Chien() { } public Chien(String couleur, int poids) { this.couleur = couleur; this.poids = poids; } void crier() { System.out.println("J'aboie sans raison !"); } } public class Loup extends Canin { public Loup() { } public Loup(String couleur, int poids) { this.couleur = couleur; this.poids = poids; } void crier() { System.out.println("Je hurle à la Lune en faisant ouhouh !"); } } public class Tigre extends Felin { public Tigre() { } public Tigre(String couleur, int poids) { this.couleur = couleur; this.poids = poids; } void crier() { System.out.println("Je grogne très fort !"); } } public class Chat extends Felin { public Chat() { } public Chat(String couleur, int poids) { this.couleur = couleur; this.poids = poids; } void crier() { System.out.println("Je miaule sur les toits !"); } } public class Test { public static void main(String[] args) { Loup l = new Loup("Gris bleuté", 20); l.boire(); l.manger(); l.deplacement(); l.crier(); System.out.println(l.toString()); } }
Et l'exécution de la classe Test donne ce résultat :
Je bois de l'eau ! Je mange de la viande. Je me déplace en meute ! Je hurle à la Lune en faisant ouhouh ! Je suis un objet de la class Loup, je suis Gris bleuté, je pèse 20
après le test il compile mais il m'affiche un croix rouge au niveau de nom de chaque classe (chien chat loup tigre lion) il me demande soit de les déclarer comme abstract soit d'ajouter la méthode "deplacement" à ces dernières
merci
merci
La méthode "déplacement" est déclarée dans les classes Felin et Canin, il n'est donc pas nécessaire de la redéfinir pour Chien, Loup (qui héritent de Canin) ni Chat, Tigre, Lion (qui héritent de Felin).
Vérifie que tu as bien hérité ce qu'il fallait, mais le code du tuto est correct, et si tu fais des copier-coller ça fonctionnera.
Vérifie que tu as bien hérité ce qu'il fallait, mais le code du tuto est correct, et si tu fais des copier-coller ça fonctionnera.
Object | Animal / \ / \ Canin Felin / \ / | \ Chien Loup / | \ Chat Tigre Lion
ok voici le code je vais faire juste copier coller
Pour "Animal"
public abstract class Animal {
protected int poids;
protected String couleur;
protected void manger(){
System.out.println("je mange de la viande");
}
protected void boire (){
System.out.println("je bois de l'eau");
}
abstract void deplassement();
abstract void crier();
public String toString(){
String str="Je suis un objet de la "+this.getClass()+", je suis "+this.couleur+", je pèse "+this.poids;
return str;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
"Felin"
public abstract class Felin extends Animal {
void deplacement(){
System.out.println("je me deplace seul");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
pour "Canin"
public abstract class Canin extends Animal {
void deplacement(){
System.out.println("je me deplace en meute");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
pour "Chat"
public class Chat extends Felin {
public Chat(){
}
public Chat (String couleur, int poids){
this.couleur=couleur;
this.poids=poids;
}
void crier(){
System.out.println("Je grogne ytrès fort");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
pour "Chien"
public class Chien extends Canin {
public Chien (){
}
public Chien (String couleur, int poids){
this.couleur=couleur;
this.poids=poids;
}
void crier (){
System.out.println("j'aboie sans raison");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
pour "Lion"
public class Lion extends Felin {
public Lion(){
}
public Lion(String couleur, int poids){
this.couleur=couleur;
this.poids=poids;
}
void crier(){
System.out.println("Je rugis dans la savane");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
pour "Loup"
public class Loup extends Canin {
public Loup(){
}
public Loup(String couleur, int poids){
this.couleur=couleur;
this.poids=poids;
}
void crier(){
System.out.println("Je hurle à la lune en faisant houhou");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
pour "Tigre"
public class Tigre extends Felin {
public Tigre(){
}
public Tigre(String couleur, int poids){
this.couleur=couleur;
this.poids=poids;
}
void crier(){
System.out.println("Je grogne ytrès fort");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
Alors pour la compilation, le programme compile mais il m'affiche une petite croix rouge et il me demande soit d'ajouter la methode deplacement soit de les declarer comme abstract
Pour "Animal"
public abstract class Animal {
protected int poids;
protected String couleur;
protected void manger(){
System.out.println("je mange de la viande");
}
protected void boire (){
System.out.println("je bois de l'eau");
}
abstract void deplassement();
abstract void crier();
public String toString(){
String str="Je suis un objet de la "+this.getClass()+", je suis "+this.couleur+", je pèse "+this.poids;
return str;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
"Felin"
public abstract class Felin extends Animal {
void deplacement(){
System.out.println("je me deplace seul");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
pour "Canin"
public abstract class Canin extends Animal {
void deplacement(){
System.out.println("je me deplace en meute");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
pour "Chat"
public class Chat extends Felin {
public Chat(){
}
public Chat (String couleur, int poids){
this.couleur=couleur;
this.poids=poids;
}
void crier(){
System.out.println("Je grogne ytrès fort");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
pour "Chien"
public class Chien extends Canin {
public Chien (){
}
public Chien (String couleur, int poids){
this.couleur=couleur;
this.poids=poids;
}
void crier (){
System.out.println("j'aboie sans raison");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
pour "Lion"
public class Lion extends Felin {
public Lion(){
}
public Lion(String couleur, int poids){
this.couleur=couleur;
this.poids=poids;
}
void crier(){
System.out.println("Je rugis dans la savane");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
pour "Loup"
public class Loup extends Canin {
public Loup(){
}
public Loup(String couleur, int poids){
this.couleur=couleur;
this.poids=poids;
}
void crier(){
System.out.println("Je hurle à la lune en faisant houhou");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
pour "Tigre"
public class Tigre extends Felin {
public Tigre(){
}
public Tigre(String couleur, int poids){
this.couleur=couleur;
this.poids=poids;
}
void crier(){
System.out.println("Je grogne ytrès fort");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
Alors pour la compilation, le programme compile mais il m'affiche une petite croix rouge et il me demande soit d'ajouter la methode deplacement soit de les declarer comme abstract
C'est parce que tu as défini dans la classe Animal une méthode deplassement (avec deux S) que tu ne redéfinis pas puisque les classes Felin et Canin ont une méthode deplacement (avec un C).
Java s'en moque des fautes d'orthographes, mais si les deux noms sont différents il pense que ce sont deux méthodes différentes donc celle qui devait être redéfinie ne l'est pas et ça ne lui plait pas.
PS. Dans ce cas le programme ne compile pas...
Java s'en moque des fautes d'orthographes, mais si les deux noms sont différents il pense que ce sont deux méthodes différentes donc celle qui devait être redéfinie ne l'est pas et ça ne lui plait pas.
PS. Dans ce cas le programme ne compile pas...
exactement mais dans mon cas il a compilé avec cette erreur il m'as juste indiqué l'erreur
merci beaucoup :)
merci beaucoup :)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
non il a compilé tout le programme en plus du ça j'avais pas autres méthodes "déplacement" c'été la seule ...
SVP j'ai une question: il y a la classe mère qui a ses propres méthodes, constructeurs etc . Et en même temps il y a la classe abstraite , quand est ce que on utilise une classe de base où on doit mettre le corps de toutes les méthodes ainsi que les constructeurs et quand on utilise la classe abstraite avec des méthodes abstraites.
merci
SVP j'ai une question: il y a la classe mère qui a ses propres méthodes, constructeurs etc . Et en même temps il y a la classe abstraite , quand est ce que on utilise une classe de base où on doit mettre le corps de toutes les méthodes ainsi que les constructeurs et quand on utilise la classe abstraite avec des méthodes abstraites.
merci
Quand tu veux, suivant les besoins.
En plus :
1) Tu peux avoir une classe abstraite avec tout ou partie de méthodes concrètes (non abstraites), ça oblige à redéfinir une classe fille, mais avec la plupart des méthodes disponibles, ce qui donne généralement un comportement "par défaut" des méthodes.
2) Les constructeurs doivent forcément être redéfinie par les classes filles, que la classe mère soit abstraite ou concrète,
3) Tu verras certainement plus tard le fonctionnement des interfaces en Java qui sont encore une autre manière de déterminer les méthodes des classes.
Java (et les autres langages orienté objet) fournit donc plusieurs manières d'organiser les classes afin de regrouper tout ce qui peut l'être et permettre donc au développeur de ne gérer que le tronc commun de la classe mère et les particularités de chaque classe fille.
En plus :
1) Tu peux avoir une classe abstraite avec tout ou partie de méthodes concrètes (non abstraites), ça oblige à redéfinir une classe fille, mais avec la plupart des méthodes disponibles, ce qui donne généralement un comportement "par défaut" des méthodes.
2) Les constructeurs doivent forcément être redéfinie par les classes filles, que la classe mère soit abstraite ou concrète,
3) Tu verras certainement plus tard le fonctionnement des interfaces en Java qui sont encore une autre manière de déterminer les méthodes des classes.
Java (et les autres langages orienté objet) fournit donc plusieurs manières d'organiser les classes afin de regrouper tout ce qui peut l'être et permettre donc au développeur de ne gérer que le tronc commun de la classe mère et les particularités de chaque classe fille.