Вы будете эффективно скрывать здесь родительскую переменную, включив "variableToUse" в дочерний класс.
Поскольку variableToUse в любом случае относится к типу ParentVariable, я предлагаю вам вообще исключить его из ChildClass и использоватьгеттер, который обеспечивает тип.Например -
public class Child extends Parent {
//private ChildVariable variableToUse; -> remove this
private ChildVariable checkAndGetChildVariable() {
if(variableToUse instanceof ChildVariable) {
return (ChildVariable)variableToUse;
}
return null;//Or throw exception
}
}
Для большей ясности, убедитесь в этом в конструкторе
public class Child extends Parent {
//private ChildVariable variableToUse; -> remove this
public Child(ParentVariable variable) {
super(checkChildVariable(variable));
}
private static ChildVariable checkChildVariable(ParentVariable variable) {
if(variable instanceof ChildVariable) {
return (ChildVariable)variable;
}
throw UnsupportedOperation("invalid type");
}
}