Partage
  • Partager sur Facebook
  • Partager sur Twitter

Cours Java : Classe mère Abstraite

Sujet résolu
    22 février 2017 à 11:06:12

    Bonjour, j'ai un problème dans le cours sur Java, je n'arrive pas à run ce code alors qu'il semble être le même que celui du cours, cela fait 2 jours que je ne comprends pas l'erreur : 

    J'essaye d'instancier une classe fille Chien mais Eclipse me demande d'instancier d'abord la classe mère mais celle ci étant abstraite, je ne peux pas le faire.

    Voici l'erreur Eclipse : Exception in thread "main" java.lang.Error: Unresolved compilation problem: No enclosing instance of type Animal is accessible. Must qualify the allocation with an enclosing instance of type Animal (e.g. x.new A() where x is an instance of Animal).

    Et mon code réduit pour ne pas prendre 2 pages :

    public class AnimalClasse {
    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 " + this.getClass() + ", je suis de couleur "
    + this.couleur + " et je pèse " + this.poids;
    return str;
    }
    
    }
    public abstract class Canin extends Animal{
    void deplacement(){
    System.out.println("Je me déplace en meute");
    }
    }
    
    public class Chien extends Canin implements Rintintin{
    
    public Chien(){
    
    }
    
    public Chien(String couleur, int poids){
    this.couleur = couleur;
    this.poids = poids;
    }
    
    void crier(){
    System.out.println("J'aboie sans raison !");
    }
    
    public void faireCalin(){
    System.out.println("Calin");
    
    }
    
    public void faireLeBeau(){
    System.out.println("Beau");
    
    }
    
    public void faireLechouille(){
    System.out.println("Lechouille");
    }
    }
    public interface Rintintin{
    public void faireCalin();
    public void faireLechouille();
    public void faireLeBeau();
    
    }
    
    public static void main(String[] args) {
    //Les méthodes d'un chien 
    Chien c = new Chien("Gris bleuté", 20);
    
    c.boire();
    c.manger();
    c.deplacement();
    c.crier();
    System.out.println(c.toString());
    
    c.faireCalin();
    c.faireLeBeau();
    c.faireLechouille();
    
    System.out.println("--------------------------------------------");
    //Utilisons le polymorphisme de notre interface
    Rintintin r = new Chien();
    r.faireLeBeau();
    r.faireCalin();
    r.faireLechouille();
    }
    }

    Merci d'avance

    -
    Edité par GaëtanNemery 22 février 2017 à 11:07:18

    • Partager sur Facebook
    • Partager sur Twitter
      22 février 2017 à 13:29:11

      Bonjour,

      Tu as déclaré tes classes (Animal, Canin, etc) comme classes internes. Ce sont donc des classes d'instances et on ne peut y accéder qu'à partir d'une instance.

      Pour résoudre le problème, déplace tes classes à l'extérieur de AnimalClasse (avec de préférence, 1 fichier par classe)

      • Partager sur Facebook
      • Partager sur Twitter
        22 février 2017 à 14:57:22

        D'accord, merci, j'ai enfin compris mon erreur :)

        • Partager sur Facebook
        • Partager sur Twitter

        Cours Java : Classe mère Abstraite

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown