Так что я пытаюсь сделать это на абстрактном классе, есть поле, и когда этот абстрактный класс унаследован от своих дочерних элементов, он сможет иметь это поле в качестве дочернего класса указанного класса в абстрактном родителе.Как указать подкласс поля родителя abastract
Например, у меня есть абстрактный класс Игрока, а затем Клиент и Противник (он будет для многопользовательской игры), который наследует Player. У игрока есть поле типа Unit. Сама единица наследуется ClientUnit и OpponentUnit. Я знаю, что могу просто передать ClientUnit для своего конструктора Client и назначить его как Unit (наследование, duh), но как бы у меня был getter, который возвращает его в форме объекта ClientUnit, не рискуя исключениями, а что - нет?
Редактировать: Я добавил код, чтобы лучше объяснить проблему.
public abstract class Player {
private Unit unit;
public void setUnit(Unit unit) {
this.unit = unit;
}
public Unit getUnit() {
return unit;
}
}
public class Client extends Player {
@Override
public ClientUnit getUnit() {
return (ClientUnit)super.getUnit();
}
}
Это похоже на работу, но я не знаю, является ли это безопасным и надежным способом его выполнения.
Какие исключения? Что вы пробовали? Знаете ли вы, что вы можете переопределить методы, чтобы сделать их тип возврата более конкретным? –
Пожалуйста, предоставьте код, больше людей попытаются решить вашу проблему. Похоже, вам нужен шаблон посетителя. –
Я попытался использовать поле Unit в абстрактном классе и использовать геттеры и сеттеры оттуда, а затем переопределить те геттеры и сеттеры с приведением в ClientUnit и прочее, но я не уверен, что это надежный способ сделать это. – Whiskydog