La classe qui hérite d'une classe abstract, doit être abstract ?
Résolu/Fermé
estrellas6
Messages postés
36
Date d'inscription
vendredi 26 juillet 2013
Statut
Membre
Dernière intervention
7 mars 2014
-
30 juil. 2013 à 11:49
estrellas6 Messages postés 36 Date d'inscription vendredi 26 juillet 2013 Statut Membre Dernière intervention 7 mars 2014 - 2 août 2013 à 12:43
estrellas6 Messages postés 36 Date d'inscription vendredi 26 juillet 2013 Statut Membre Dernière intervention 7 mars 2014 - 2 août 2013 à 12:43
A voir également:
- La classe qui hérite d'une classe abstract, doit être abstract ?
- Classe ram - Guide
- Copain d'avant photo de classe - Forum Réseaux sociaux
- Impossible de trouver ou charger la classe principale @user_jvm_args.txt ✓ - Forum Réseaux sociaux
- Retrouver photo de classe gratuitement - Forum Réseaux sociaux
- Bluetooth mercedes classe a 2005 - Forum Autoradio
6 réponses
KX
Messages postés
16733
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 janvier 2024
3 015
30 juil. 2013 à 18:27
30 juil. 2013 à 18:27
À 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
estrellas6
Messages postés
36
Date d'inscription
vendredi 26 juillet 2013
Statut
Membre
Dernière intervention
7 mars 2014
31 juil. 2013 à 13:41
31 juil. 2013 à 13:41
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
KX
Messages postés
16733
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 janvier 2024
3 015
31 juil. 2013 à 21:09
31 juil. 2013 à 21:09
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
estrellas6
Messages postés
36
Date d'inscription
vendredi 26 juillet 2013
Statut
Membre
Dernière intervention
7 mars 2014
31 juil. 2013 à 22:20
31 juil. 2013 à 22:20
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
KX
Messages postés
16733
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 janvier 2024
3 015
31 juil. 2013 à 22:47
31 juil. 2013 à 22:47
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...
estrellas6
Messages postés
36
Date d'inscription
vendredi 26 juillet 2013
Statut
Membre
Dernière intervention
7 mars 2014
1 août 2013 à 01:09
1 août 2013 à 01:09
exactement mais dans mon cas il a compilé avec cette erreur il m'as juste indiqué l'erreur
merci beaucoup :)
merci beaucoup :)
KX
Messages postés
16733
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 janvier 2024
3 015
1 août 2013 à 06:14
1 août 2013 à 06:14
Il a pu compiler en partie seulement, car certaines classes étaient correctes et aussi en se servant des versions précédentes des classes (que tu avais déjà compilé avant de rajouter l'erreur)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
estrellas6
Messages postés
36
Date d'inscription
vendredi 26 juillet 2013
Statut
Membre
Dernière intervention
7 mars 2014
1 août 2013 à 14:20
1 août 2013 à 14:20
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
KX
Messages postés
16733
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 janvier 2024
3 015
1 août 2013 à 20:41
1 août 2013 à 20:41
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.
estrellas6
Messages postés
36
Date d'inscription
vendredi 26 juillet 2013
Statut
Membre
Dernière intervention
7 mars 2014
2 août 2013 à 12:43
2 août 2013 à 12:43
ok merci beaucoup j'espère que la partie "interface" est facile, merci :)