Esiste una classe BaseGame astratta che verrà ereditata da specifiche classi di gioco.
Questa classe ha un attributo requestHandler che sarà usato in tutte le sottoclassi e dovrebbe essere inizializzato nel costruttore, quindi metto questo costruttore in superclasse.
È meglio (ha più senso) mantenere requestHandler privato (caso 1) e accedervi in sottoclassi via accessors o renderlo protetto (caso 2) e accedervi direttamente? Ci sono implicazioni nell'uso del caso 1 o caso 2, o semplicemente non importa?
case1:
public abstract class BaseGame {
private RequestHandler requestHandler;
protected BaseGame(RequestHandler requestHand) {
this.requestHandler = requestHand;
}
protected RequestHandler getRequestHandler() {
return requestHandler;
}
}
public class SoccerGame extends BaseGame {
public SoccerGame(RequestHandler requestHand) {
super(requestHand);
}
public void doSoccerGame() {
getRequestHandler().submitScore(10);
}
}
caso 2:
public abstract class BaseGame {
protected RequestHandler requestHandler;
protected BaseGame(RequestHandler requestHand) {
this.requestHandler = requestHand;
}
}
public class SoccerGame extends BaseGame {
public SoccerGame(RequestHandler requestHand) {
super(requestHand);
}
public void doSoccerGame() {
requestHandler.submitScore(10);
}
}