• [^] # Re: Interface

    Posté par . En réponse au message dériver une classe conteneur de données de classe dérivée. Évalué à 1.

    Voici un exemple concret de mon problème . c'est analogue à mon probleme car je dois gérer des copies de molécules de huckel.
    en fait ds l'exemple ci dessous

    A = Atom de base
    AA : atom huckel
    contA : squelette de la molécule . j'ai besoin d'un constucteur par copie

    dans mon main quand je fais une iteration sur la copie du conteneur ca plante sur le cast , forcément, pcq je caste en AA et que mon constructeur par copie ne copie que des objets de classe A foaut -il donc que je fasse un nouveau conteneur contAA ? et que donc pour gérer des objets AA je ne me serve plus du tout de contA ?

    public class A {
    public int a;
    public A(int a) {
    this.a = a;
    }
    public A(A other) {
    this.a = other.a;
    }
    }

    public class AA extends A {
    public int aa;
    public AA (int a, int aa) {
    super (a);
    this.aa = aa;
    }
    public AA (AA other) {
    super (other);
    this.aa = other.aa;
    }
    }


    import java.util.ArrayList;
    import java.util.Iterator;

    public class ContA {
    public ArrayList contA;
    public ContA() {
    contA = new ArrayList ();
    }

    public ContA(ContA other) {
    contA = new ArrayList ();
    Iterator it = other.contA.iterator();
    A a;
    while (it.hasNext()) {
    a = (A) it.next();
    this.contA.add(new A (a));
    }
    }
    }



    import java.util.Iterator;

    public class Main {

    /**
    * @param args
    */
    public static void main(String[] args) {
    ContA myContA = new ContA();
    AA a1 = new AA(11, 20);
    AA a2 = new AA(12, 25);
    myContA.contA.add(a1);
    myContA.contA.add(a2);
    Iterator it = myContA.contA.iterator();
    AA a;
    while (it.hasNext()) {
    a = (AA) it.next();
    System.out.println(a.a + " " + a.aa);
    }
    ContA copyContA = new ContA(myContA);

    it = copyContA.contA.iterator();
    while (it.hasNext()) {
    a = (AA) it.next();
    System.out.println(a.a + " " + a.aa);
    }
    }

    }