ok merci pour votre aide, j'ai tous comprit sauf un point il faudrait une methode qui prend en parametre un Canvas et qui fait appel a la methode paint()
je ne vois pas comment pas comment modéliser sa :(
Version imprimable
ok merci pour votre aide, j'ai tous comprit sauf un point il faudrait une methode qui prend en parametre un Canvas et qui fait appel a la methode paint()
je ne vois pas comment pas comment modéliser sa :(
C'est pour faire quoi ?
A une question comme ça je répondrais bienCode:
1
2
3 void nomMethode(Canvas _canvas) { _canvas.paint() ; }
un petit truc que je ne comprend pas:
[code]Code:
1
2
3
4
5
6
7
8
9
10
11
12 public class A{ private static int nb; protected int numero=10; public A(int n){ this(); numero+=n; } public A() { nb++;} public int getNumero(){return numero;} public void f(){System.out.println(numero+"("+nb+")");} public void g(int n){System.out.println("A"+n);} }
Code:
1
2
3
4
5
6 public class B extends A{ public void f(int n){ numero+=n; super.f(); } }
pourquoi b.f() donne 10(2) et non 10(1) en gros sa veux dire que quand je fait A b=new B(); il fait automatiquement un super() dans le constructeur de B ?Code:
1
2
3
4
5
6
7
8
9
10
11 public class testA{ public static void main(String[] args){ A a=new A(1); a.f(); a.g(12); A b=new B(); //b.f(5); b.f(); } }
c'est pour l'exercice 2 mit en première page jonkille
un constructeur d'une classe avec un extends d'une autre classe, si on écrit pas de constructeur il fait automatiquement un super() dedans je me trompe je viens de remarqué ça ?
voilà la suite de ce que j'ai écrit
Code:
1
2
3
4
5 public class D extends B implements I{ private int num; D(int n){num=n;} public void h(String s){System.out.println(s+" : "+num+" "+getNumero());} }
Code:
1
2
3
4
5 abstract class C extends A{ C(int n){super(n);} public abstract void g(int n); }
le main en entier:Code:
1
2
3
4
5 public class F extends C{ F(int n){super(n);} public void g(int n){System.out.println("F"+n);} }
tous sa donne:Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 public class testA{ public static void main(String[] args){ A a=new A(1); a.f(); a.g(12); B b=new B(); //b.f(5); b.f(); //C c=new C(3); C f=new F(3); f.g(2); f.f(); D dl=new D(4); dl.f(16); dl.h("hiiii!"); } }
11(1)
A12
10(2)
F2
13(3)
26(4)
hiiii! : 4 26
je comprend pas le 10(2) pourquoi 2 et pas 1?
ensuite pourquoi 13(3) le 3 pourquoi ?
26(4) pourquoi 4 ?
hiii!:4 26 pourquoi 26 et pas 10?
je comprend strictement rien au mode de fonctionnement des classe la, je vois qu'une chose quand ont fait X x=new X(valeur) et X est extends de W donc automatiquement sa active le constructeur de W et si W extends U sa active également le constructeur de U c'est ça?
Je te montre sur un exemple, à toi de faire pour les autres :
10(2), c'est ce qui est affiché pour la ligne b.f();
Se demander quel est le type concret de b ? C'est B puis tu as fait un new B.
Dans B, y a t'il une méthode f ? Non, c'est donc dans un parent.
Quel est le premier parent de B, c'est A.
Dans A, y a t'il une méthode f ? Oui, c'est donc elle qui est appelée...
Que fait elle ? Elle fait System.out.println(numero+"("+nb+")");
Elle prend donc une variable "numero" dans A qui est une variable d'instance (propre à l'instance b qui est de type B et donc de type A) Cette variable vaut 10. OK
Ensuite, elle affiche le contenu de la variable nb qui est quand à elle une variable de classe (partagée entre toute les instances) donc impacté par d'autres construction d'objet de type A (ou dérivé). Il faut donc regarder les lignes précédentes à b = new B();
Juste avant, tu as crée un A (comme c'est la méthode main, il y en a pas d'autres ... si cela avait été dans une méthode, il aurait fallu regarder tout l'historique du programme depuis le point d'entrée et c'est pour cela qu'il faut garder les variables statiques (de classe) pour certains usages bien particulier sinon c'est le syndrôme de la variable globale !)
En créant ton A, dans ton constructeur de A, tu post-incrémentes nb (qui par défaut est initialisé à 0), nb vaut donc 1.
En créant ton B ultérieurement, tu repasses dans le constructeur sans argument de A et tu post-incrémentes à nouveau nb qui était à 1 et qui passe donc à 2.
Voila pourquoi tu as 10(2)
Si je te montre pas pour les autres, c'est que je n'ai pas que ça à faire.
tu peux utiliser le debugger d'eclipse et avancer en pas à pas pour voir ...
ou attendre qu'une autre ame charitable te l'explique ;)