Bonjour
Je me remet a java après 4-5 ans sans y toucher et c'est un peu dur de se remettre dans le bain. PHP m'a pas aidé a garder un bon niveau...
J'ai 3 classes dans mon exemple.
Une classe Cible abstraite
Une classe CibleCirculaire
Une classe FenetreDeJeu (qui contient mes cibles)
la classe Cible contient une méthode tirer(x, y) qui appelle la méthode contient(x, y) qui vérifie si on est dans la cible, et si oui, qui appelle la méthode choc.
Les méthodes contient et choc sont abstraites car elles dépendent de la forme géométrique de mes cibles.
J'ai donc écrit ca :
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
17
18
19
20
21
22
23
24
25
26 public abstract class Cible { private int positionX; private int positionY; public Cible(int x, int y){ this.positionX = x; this.positionY = y; } protected abstract boolean contient(int x, int y); protected abstract void choc(); public void tirer(int x, int y){ if(contient(x,y)){ choc(); } } public int getX(){ return positionX; } public int getY(){ return positionY; } }Et un petit lanceur :
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
17
18
19
20
21
22
23
24
25
26
27
28 public class CibleCirculaire extends Cible { private int rayon; public CibleCirculaire(int x, int y, int rayon) { super(x, y); this.rayon = rayon; // TODO Auto-generated constructor stub } public int getRayon(){ return rayon; } public void setRayon(int r){ this.rayon = r; } public boolean contient(int x, int y){ boolean aRetourner = false; int xCible = getX(); int yCible = getY(); int distance = (x-xCible)*(x-xCible)+(y-yCible)*(y-yCible); if(distance<=rayon){ aRetourner = true; } return aRetourner; } protected void choc(){ setRayon(getRayon()-1); } }
Le problème est que je voudrais ne pas autoriser l'appel à la méthode choc depuis l'extérieur de ma classe. J'aimerais donc mettre la méthode choc en private.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 public class Lanceur { public static void main(String[] args) { FenetreDeJeu f = new FenetreDeJeu(500, 600); CibleCirculaire c1 = new CibleCirculaire(100, 200, 10); f.ajouterCible(c1); c1.choc(); c1.choc(); c1.choc(); System.out.println(c1.getRayon()); } }
Java ne veut pas mettre une méthode abstraite privée, comment puis je faire pour avoir à la fois la factorisation de la méthode tirer, et l'accès réduit à choc ?
Pierre
Partager