Ce que je veux vraiment, c'est une classe avec un constructeur générique, et quand un constructeur identique à une sous-classe est invoqué, la sous-classe aura accès aux mêmes champs. Voici un exemple de ce que je voudrais faire:Classe Java dont les champs ne sont accessibles qu'à ses sous-classes (sans getters/setters)?
public abstract class Command{
private Mediator m
public Command(Mediator med){
m = med;
}
abstract void exec();
}
public class FoobarCommand extends Command{
public FoobarCommand(Mediator med){
super(med);
}
public void exec(){
med.doAFoobar()
}
}
public static void main(String[] args){
Mediator m = new Mediator();
Command c = new FoobarCommand(m);
c.exec();
}
Évidemment, cela ne fonctionnera pas parce que FoobarCommand n'a pas accès direct au médiateur med. Alors, comment auriez-vous accès au champ med? Je ne veux pas que quelqu'un d'autre que les sous-classes y aient accès, et "protected" n'est pas une option parce que je veux que les gens puissent créer leurs propres commandes (qui seraient évidemment en dehors du paquet).
Je ne comprends pas la raison pour laquelle vous avez pré-protégé pas beng une option –
Il semble que ce problème est causé par "exec" étant une méthode du commandant pas le médiateur. Pourquoi ne pas avoir la fonctionnalité d'exec comme une méthode du Mediator (déclarée comme faisant partie d'une interface de Mediator)? Ensuite, vous pourriez avoir un objet Command à usage général avec un setter pour le Mediator et une méthode exec polymorphe. –
Merci pour tous les commentaires tout le monde. J'ai été un peu privé de sommeil et j'ai réalisé que je voulais "protégé" tout au long, je n'aurais même pas dû poser la question: -! – Jay