Ich bin neu in Java und Objektorientierung so entschuldigt, wenn ich nicht klar bin.Abrufen von Feldern und Methoden aus einer anderen Klasse
Ich habe ein Aquarium mit Env3D gemacht und die Grundsätze der SOLID
Ich habe eine Simulation
Klasse anwenden möchten, Token
Klasse, Fish
Class.
Meine Klasse Token
befasst sich derzeit mit der Erzeugung der Fische und deren Verhalten. Idealistisch möchte ich, dass das Verhalten eine separate Klasse von der Klasse Token
ist.
Ich würde meine Fish
brauchen, um zwei Klassen zu erweitern, Token
und Behavior
die ich weiß, ist nicht möglich.
Wie würde ich das tun? Die Fish
könnte eine Behavior
Schnittstelle implementieren, aber wie würde es die Felder und Methoden aus der Behavior
Klasse bekommen?
Token Klasse
package UserCode;
/**
* It's a Token!
*
* @author (Tom)
* @version (02.03.2017)
*/
public class Token
{
// Env3d-defined object-specific fields:
// Reference to the 3D model, called 'model':
String model;
// Reference to texture-map, called 'texture':
String texture;
// Scale factor applied to model:
double scale;
// Position in 3D world (x,y,z coordinates):
double x;
// Position in 3D world (x,y,z coordinates):
double y;
// Position in 3D world (x,y,z coordinates):
double z;
// Orientation (about x,y,z):
double rotateX;
// Orientation (about x,y,z):
double rotateY;
// Orientation (about x,y,z):
double rotateZ;
// Set transparency to true:
boolean transparent=true;
public void setModel(String model){
this.model = model;
}
public void setScale(double scale){
this.scale = scale;
}
public void setTexture(String texture){
this.texture = texture;
}
public void move()
{
// rotate about y axis
//rotateY += 1;
}
public void setOrientationX(double x)
{
// set position
this.rotateX = x;
}
public void setOrientationY(double y)
{
// set position
this.rotateY = y;
}
public void setOrientationZ(double z)
{
// set position
this.rotateZ = z;
}
public void setPositionX(double x)
{
// set position
this.x = x;
}
public void setPositionY(double y)
{
// set position
this.y = y;
}
public void setPositionZ(double z)
{
// set position
this.z = z;
}
}
JavaFish Klasse
package UserCode;
/**
* <h1>Aquarium: JavaFish</h1>
* <p>This class generates and controls the JavaFish in the Aquarium.
* <p>The characteristics of the JavaFish are to swim horizontelly, backwards and forwards.
*
*@version 1.0.0
*@author Tom
*/
public class JavaFish extends Token
{
private double _xspeed = 0.08;
/**
* Creates the JavaFish and initilises instance/object variables of images of JavaFish and Aquarium.
* The second initilises position and orientation. These come from the Framework package.
*/
public JavaFish()
{
setModel("models/billboard/billboard.obj");
setScale(0.5);
setTexture("textures/javaFish/JavaFish.png");
setPositionX(1.0);
setPositionY(5.0);
setPositionZ(1.0);
setOrientationX(0);
setOrientationY(-90);
setOrientationZ(0);
}
public void move()
{
// JavaFish x-axis assigned to move forwards (+=) by instance varible in constructor
x += _xspeed;
// Flip JavaFish orientation and change direction if fish reaches specific x-axis point
if (x < 2)
{
_xspeed = 0.05;
setOrientationY(-90);
} else if (x > 8){
_xspeed = -0.05;
setOrientationY(90);
}
}
}
Angenommen, 'Behaviour' definiert das Verhalten des Fisches (z. B. wie es sich bewegt), wäre der logische Ansatz,' Behaviour' als separate Klasse zu belassen und eine Methode wie 'setBehavior' in' Fish' zu haben. Siehe [Besuchermuster] (https://en.wikipedia.org/wiki/Visitor_pattern). Schwer zu sagen, ohne den eigentlichen Code von 'Behaviour' zu sehen. – Paul
"Meine Token-Klasse beschäftigt sich derzeit mit dem Erzeugen des Fisches und deren Verhalten", wenn das Ihr Ziel ist, dann sehe ich nicht, warum 'Fish' irgendwelche dieser Klassen erweitern sollte. Das Verhalten könnte die Fischklasse (als Klassenvariable) bilden und "Token" sollte jeden "Fisch" erzeugen und ihm sein entsprechendes Verhalten übergeben. – moondaisy