Sono piuttosto inesperto in Java, e sto avendo un problema nel formare una sottoclasse di una classe che ho creato. La classe che ho creato, chiamata Vector2D
, contiene metodi, come add(Vector2D addend)
, che accetta un oggetto Vector2D
come argomento e restituisce un oggetto Vector2D
. Questo metodo in particolare è progettato per aggiungere due vettori e restituire la somma.
Quindi, ho iniziato a codificare una sottoclasse, chiamata Position2D
, che intendo avere tutte le funzionalità della classe Vector2D
, ad eccezione delle funzioni aggiuntive e l'utilizzo di Vector2D
nelle classi preesistenti, sia come argomento, tipo restituito, ecc., sostituito con Position2D
, in modo che la funzione add(Position2D addend)
aggiunga due Position2D
di vettori insieme e restituisca la somma come Position2D
.
Il problema sorge quando, quando Position2D
eredita da Vector2D
, tali funzioni continuano a funzionare in termini di oggetti Vector2D
, sputando un errore non appena viene passato un oggetto Position2D
.
Il codice pertinente per la classe Vector2D
è il seguente:
public class Vector2D{
//Field Variables
private double x; //The vector's x-coordinate
private double y; //The vector's y-coordinate
//Constructors
public Vector2D(){
//Constructs empty vector.
setX(0);
setY(0);
}
//Methods
public void setX(double newX){
//This method is not problematic when inherited for the subclass.
x = newX;
}
public void setY(double newY){
//This method is not problematic too.
y = newY;
}
public Vector2D add(Vector2D addend){
//Adds two vectors and returns the sum.
//This method, however, does pose a problem.
Vector2D sum = new Vector2D();
sum.x = x + addend.x;
sum.y = y + addend.y;
return sum;
}
}
L'unico work-around che posso attualmente pensare a cosa potrebbe essere il codice in add(Position2D addend)
in Position2D
è:
public Position2D add(Position2D addend){
//Adds two position vectors and returns the sum.
Position2D sum = new Position2D();
sum.x = x + addend.x;
sum.y = y + addend.y;
return sum;
}
Ad esempio, ripeti il metodo da Vector2D
e modificalo manualmente. Questo, naturalmente, non è efficiente e fa perdere tempo, specialmente quando lo stesso deve essere fatto per metodi simili, e più ancora ogni volta che intendo creare più sottoclassi, ad es. %codice%. Pertanto, sto cercando un mezzo molto più pulito ed efficiente per farlo.