Partage
  • Partager sur Facebook
  • Partager sur Twitter

Incompréhensions dans le tuto sur les classes abstraites

    21 mars 2010 à 3:32:48

    Salut à tous.

    Je poste ici car j'ai pas mal d'incertitudes après plusieurs lectures/tests sur le tuto des classes abstraites et j'espère que vous saurez éclairer ma lanterne. C'est assez long, mais j'essaie de détailler tous mes problèmes pour expliquer ce qui me bloque, désolé :)

    1 / La première concerne les passages sur l'instanciation des objets :

    Citation

    Animal loup = new Loup();



    L'auteur explique qu'il

    Citation

    instancie un objet Loup que nous avons mis dans un objet de type Animal



    Ce serait donc une sorte de cast ?
    L'objet final serait donc à considérer comme un animal ou un loup ? En essayant de faire travailler ma logique je dirais (ce que l'auteur semble confirmer quelques lignes plus bas), pourtant si on met l'objet loup dans l'objet animal, on devrait alors avoir un animal.

    Quel est l'interêt d'utiliser cette methode, plutot que de déclarer directement

    Citation

    Loup loup = new Loup();



    En y repensant, c'est vrai que je ne saisis pas la logique d'instanciation avec Animal d'un côté et loup de l'autre. Si j'ecris par exemple :

    Citation

    String chaineDeCaracteres = new String();


    Quel est le rôle du String tout à gauche dans la ligne de commande et celui tout a droite ?

    2 / L'utilisateur utilise 2 type de classes abstract, la première est déclarée abstract, et la seconde est déclarée public abstract.
    La public abstract a pour role d'etre accessible dans le main de mon programme pour renseigner le type de déplacement du félin ou du canin, tout en gardant ces objets non instanciables puisqu on ne connait pas forcement le type de cri du félin (miaulement, rugissement ...) . C'est ça ?

    3/ Je me prends un espèce de warning dans les dents sous Netbeans et je ne comprends pas pourquoi :

    Citation

    package classeabstraite;

    abstract class Animal {
    protected String couleur;
    protected int poids;

    abstract void deplacement();
    abstract void communiquer();

    @Override
    public String toString(){
    String str= new String();
    str = "Je suis un de type " +this.getClass() ;
    return str;
    }
    }



    Citation

    package classeabstraite;

    public class Chien extends Animal{


    public Chien(){
    }

    public void communiquer(){
    System.out.println("J'aboie");
    }

    public void deplacement(){
    System.out.println("Je marche");
    }
    }



    Le programme m'indique alors "exporting non public type through public API". Qu'est ce que cela signifie et dois-je en tenir compte puisque cela fonctionne quand même ?

    4 / Mes setters/getters pour les variables de la classe abstraite (ici couleur et poids) doivent ils être placés dans la classe abstraite ou dans les classes filles ?

    • Partager sur Facebook
    • Partager sur Twitter
      21 mars 2010 à 9:17:47

      Salut !

      Je pense que tu devrais relire le cours sur l'héritage et les classes abstraites, c'est très important de bien comprendre toutes les notions.

      Citation : Mr.Azerty

      Citation

      String chaineDeCaracteres = new String();


      Quel est le rôle du String tout à gauche dans la ligne de commande et celui tout a droite ?



      Là c'est l'un des tout premier cours, dans les variables et les opérateurs, on t'apprend la notion d'objet et d'instance.

      Tu peux commencer par là, ça devrait être plus clair pour toi.

      Bonne lecture et bonne prog !
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        21 mars 2010 à 11:49:58

        Utiliser Animal plutôt que Loup est tout l'intérêt du polymorphisme. Au niveau de ton instanciation c'est sûr c'est un Loup mais tu le gères comme un Animal en appelant les méthodes que tu as défini dans Animal.
        Tu peux lui demander son cri il te répondra ce qu'il faut, en fonction de son vrai type.

        Tu ne perds pas le type de ton Loup car si tu fais
        Animal loup = new Loup();
        if(loup instanceof Loup){
         System.out.println("C'est un loup");
        }
        


        Tu as bien : " C'est un loup

        Je pense tout de même que tu as des notions incomprises.

        C'est n'est pas un cast car un Loup est un Animal. Du point de vue des classes

        par contre si tu veux le traiter en loup là tu es obligé de refaire le cast vers Loup car un Animal n'est pas un Loup
        • Partager sur Facebook
        • Partager sur Twitter

        Incompréhensions dans le tuto sur les classes abstraites

        × 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