variable a un accès privé
Je suis en train de faire une forme abstraite de la classe pour le rectangle et l'ellipse, la seule méthode abstraite, j'ai donné la forme était la méthode de tirage, mais après je lui ai donné un constructeur et tout ce qu'il me donne une erreur dans la classe rectangle en disant que la couleur et les autres variables ont privé accède voici mon code:
public abstract class Shape{
private int x, y, width, height;
private Color color;
public Shape(int x, int y, int width, int height, Color color){
setXY(x, y);
setSize(width, height);
setColor(color);
}
public boolean setXY(int x, int y){
this.x=x;
this.y=y;
return true;
}
public boolean setSize(int width, int height){
this.width=width;
this.height=height;
return true;
}
public boolean setColor(Color color){
if(color==null)
return false;
this.color=color;
return true;
}
public abstract void draw(Graphics g);
}
class Rectangle extends Shape{
public Rectangle(int x, int y, int width, int height, Color color){
super(x, y, width, height, color);
}
public void draw(Graphics g){
setColor(color);
fillRect(x, y, width, height);
setColor(Color.BLACK);
drawRect(x, y, width, height);
}
}
class Ellipse extends Shape{
public Ellipse(int x, int y, int width, int height, Color color){
super(x, y, width, height, color);
}
public void draw(Graphics g){
g.setColor(color);
g.fillOval(x, y, width, height);
g.setColor(Color.BLACK);
g.drawOval(x, y, width, height);
}
}
Vous devez vous connecter pour publier un commentaire.
private int x, y, width, height;
signifie qu'ils ne peuvent être accessibles à partir de l'effectif de la classe où elles sont déclarées. Vous devez créer appropriéeget
etset
méthodes et de les utiliser. Vous voulez que le champs soitpublic
ouprotected
d'y accéder en utilisant la notation par points, mais IMO c'est la meilleure conception pour les garder privé et l'utilisationget
etset
. Voir aussi En Java, la différence entre la valeur par défaut, public, protected et private qui explique le champs de visibilité.public int getX(){return this.x;}
etc... et puis dans la sous-classes (par exemple,Ellipse
) de les utiliser comme:g.fillOval(getX(), getY(), getWidth(), getHeight());
public int getWidth(){return this.width;}public int getX(){return this.x;}
) et les utiliser pour récupérer la valeur du champ au lieu d'accéder directement le champtrue
? LesetSomething
n'a pas besoin de retourner quoi que ce soit, lagetSomeField
a retournersomeField
. Si vous pouvez mettre à jour le code dans votre question avec les dernières modifications que nous pourrions être en mesure de vous aider.Tous ces domaines sont privés de la classe parent.
Vous ne pouvez pas accéder à une zone privée de l'extérieur de la classe, même pas de sous-classes.
Vous pouvez modifier le champ protégé ou fournir des getters pour les sous-classes à l'appel.
Donc, dans la Forme, ajouter une méthode
et ensuite vous pouvez faire
dans votre sous-classes. De même pour les autres champs.