J'ai du mal à choisir entre ces trois façons de gérer les variables de champ pour une sous-classe et une superclasse.
Méthode 1 :
public abstract class Vehicle {
public abstract int getNumberOfWheels();
public abstract int getCost();
}
public class Car extends Vehicle {
private int numberOfWheels;
private int cost;
public Car() {
this.numberOfWheels = 4;
this.cost = 10000;
}
public int getNumberOfWheels() {
return numberOfWheels;
}
public int getCost() {
return cost;
}
}
Avec cette méthode, je dois implémenter les mêmes méthodes getter en double dans chaque sous-classe de Vehicle. J'imagine que ce serait un problème avec des méthodes getter plus compliquées, qui doivent être dupliquées et éventuellement maintenues.
Méthode 2 :
public abstract class Vehicle {
private int numberOfWheels;
private int cost;
public int getNumberOfWheels() {
return numberOfWheels;
}
public int getCost() {
return cost;
}
public void setNumberOfWheels(int numberOfWheels) {
this.numberOfWheels = numberOfWheels;
}
public void setCost(int cost) {
this.cost = cost;
}
}
public class Car extends Vehicle {
private int numberOfWheels;
private int cost;
public Car() {
super.setNumberOfWheels(4);
super.setCost(10000);
}
}
Avec cette méthode, je dois mettre en œuvre des méthodes de paramétrage que je ne souhaite peut-être pas avoir. Je ne voudrais peut-être pas que d'autres classes puissent modifier les champs, même dans le même package.
Méthode 3 :
public abstract class Vehicle {
private int numberOfWheels;
private int cost;
public class Vehicle(int numberOfWheels, int cost) {
this.numberOfWheels = numberOfWheels;
this.cost = cost;
}
public int getNumberOfWheels() {
return numberOfWheels;
}
public int getCost() {
return cost;
}
}
public class Car extends Vehicle {
private int numberOfWheels;
private int cost;
public Car() {
super(4, 10000);
}
}
Avec cette méthode et avec beaucoup de champs, le nombre de paramètres du constructeur va devenir énorme, ce qui n'est pas normal.
Il semble que ce soit un problème suffisamment courant pour qu'il existe une sorte de "meilleure pratique". Existe-t-il une meilleure façon de procéder ?