Bonsoir,

voici un exercice d'examen, il y a quelque point que je n'est pas saisie:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
public interface I{
    public void f();
    public void g(int n);
}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
public interface J{
    public void g(int n);
    public int h(int n);
}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
public class A{
    private int moi;
    public A(int moi){this.moi=moi;}
    public int getMoi(){return moi;}
    public int f(int n){
	moi+=n;
	System.out.println("A"+moi);
	return moi;
    }
}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
public class B extends A implements J{
    private static int cptB;
    public B(int moi){
	super(2*moi);
	cptB++;
    }
    public void g(int n){System.out.println("B"+n+"-"+cptB);}
    public int h(int n){
	int moi=getMoi();
	System.out.println("B"+(moi+n));
	return moi;
    }
}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
public class C extends A{
    public C(int moi){super(moi);}
}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
public class D extends B implements I{
    private int nb;
    public D(int moi,int nb){super(moi);this.nb=nb;}
    public void f(){
	f(nb);
	System.out.println("D"+nb);
    }
}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
public class E extends C implements I{
    public E(int moi){super(moi);}
    public void f(){System.out.println("E"+f(3));}
    public void g(int n){
 
    }
 
}

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
public class Test2{
    public static void main(String[] args){
	A a=new A(5);
	A d1=new D(8,2);
	B b1=new B(6);
	C c1=new C(7);
	D d2=new D(2,4);
	System.out.println(a.f(2));
	c1.f(2);
	d2.f();
	d2.g(3);
	b1.g(2);
	b1.h(4);
    }
}

alors dans l'exercice il faut dire si il y d'abord des erreurs dans le programme ensuite dire ce qu'il se passe pour chaque instruction dans le main (si erreur corrigé etc)

ma première question:
pourquoi D qui implements I compile sans erreur alors que E qui implements I ne compile pas sans la méthode g ?
quand on implements une interface il faut utiliser toutes les méthodes de l'interface alors pourquoi sa compile??

seconde question:
A d1=new D(8,2); pourquoi sa compile sans erreur alors que A est la classe mère de D, elle ne possède donc pas toutes les méthodes de D (il n'y a que D qui hérite des méthodes de la classe A)

dernière question:
d2.g(3) donne B3-3 cptB est static c'est à dire que la variable gardera la valeur de chaque instance du même type: (la variable évolue)
alors pourquoi : b1.g(2) donne B2-3 ? et non B2-4 !


Merci d'avance pour votre aide !