Что вы можете сделать, это присвоить подклассу переменную, которая называется точно такой же, а затем установить ее равной суперклассу, используя конструкторы и методы, такие как
public abstract class Command{
private Mediator m
public Command(Mediator med){
m = med;
}
abstract void exec();
}
public class FoobarCommand extends Command{
private Mediator m;
public FoobarCommand(Mediator med){
super(med);
m = med;
}
public void exec(){
m.doAFoobar()
}
}
public static void main(String[] args){
Mediator m = new Mediator();
Command c = new FoobarCommand(m);
c.exec();
}
Однако это ограничено в том, что он может делать. Поскольку m
является ссылкой на объект, изменения в m
в подклассе будут отражены в суперклассе; однако этого не произошло бы, если бы ученик был примитивом. (Учитывая, что все примитивы имеют объектный эквивалент, это можно обойти, если немного неуклюже)
Подкласс также должен напрямую получать ссылку, поскольку там хранится копия ссылки. Для абстрактных суперклассов это хорошо, так как вам гарантирован подкласс, но ниже вы должны быть осторожны с обработкой данных.