variable hat einen privaten Zugang
Ich versuche zu machen, eine abstrakte Form, die Klasse für Rechteck und ellipse die einzige abstrakte Methode, die ich gab Form wurde die draw-Methode, aber nachdem ich gab es einen Konstruktor und alles, was es gibt mir eine Fehlermeldung in die Rechteck-Klasse zu sagen, dass die Farbe und die anderen Variablen haben private Zugänge hier ist mein 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);
}
}
InformationsquelleAutor user3602628 | 2014-05-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
private int x, y, width, height;
bedeutet, dass Sie nur zugegriffen werden kann, von der eigentlichen Klasse, in der Sie deklariert sind. Sollten Sie entsprechendeget
undset
Methoden und verwenden Sie Sie. Sie möchten die Felder werden entwederpublic
oderprotected
um Ihnen den Zugang über die Punkt-notation, aber IMO ist es besser, Sie für sich zu behalten und zu verwendenget
undset
. Siehe auch In Java, Unterschied zwischen default, public, protected und private, erklärt, dass die Felder Sichtbarkeit.in der Superklasse fügen Sie die accessor-Methoden für die privaten Felder z.B.
public int getX(){return this.x;}
etc... und dann in der sub-Klassen (z.B.Ellipse
) verwenden Sie wie:g.fillOval(getX(), getY(), getWidth(), getHeight());
Also, wenn ich Sie richtig verstehe, sagst du: ich muss hinzufügen, get-Methoden, um meine super Klasse (da bin ich ziemlich sicher, dass ich setter) und legen Sie diese auf true zurück, und dann legte Sie in die der Unterklasse ersetzen alle Variablen in der Klammer?
Müssen Sie die get-Methoden in die super-Klasse, und setzen Sie Sie zurück, was Sie zurückgeben müssen (z.B.
public int getWidth(){return this.width;}public int getX(){return this.x;}
), und verwenden Sie zum abrufen der Wert des Feldes statt den Zugriff auf das Feld direktOkay, ich Tat was Sie sagte und fügte hinzu, get-Methoden, um alle setter und hatte Sie true zurück, und ich habe die get-Methoden innerhalb der Unterklasse genau so wie in deinem Beispiel, aber jetzt ist es zu sagen-Methode getColor nicht angewendet werden kann, um bestimmte Arten. Also, was ist passiert?
InformationsquelleAutor Totò
Alle diese Felder sind privat zu der übergeordneten Klasse.
Können Sie nicht auf ein privates Feld von außerhalb der Klasse, auch nicht von Unterklassen.
Könnten Sie den Bereich ändern, um geschützt oder bieten Getter für die Unterklassen zu nennen.
So, in der Form, fügen Sie eine Methode
dann kann man
in Ihre Unterklassen. Dasselbe für die anderen Felder.
InformationsquelleAutor Thilo