все это может показаться немного странным, но я хочу установить значение переменной суперкласса и установить его равным тому, что будет в подклассе. Например, у меня есть абстрактный класс, называемый SpriteBody
, а в методе def
я хочу установить переменную bodyType
на то, что определено в Block
, которое расширяет SpriteBody
, как я могу сделать что-то вроде этого? Я мог бы сделать это наоборот, установив значение суперкласса и используя переменную в методе суперкласса, но я мог бы написать меньше кода, если бы мог сделать это первым способом.Изменение переменной класса java из унаследованного класса
-2
A
ответ
1
Абстрактный суперкласс может объявить абстрактный метод для реализации подкласса. Например:
public abstract class SpriteBody {
private BodyType bodyType;
protected abstract BodyType determineBodyType();
public void def() {
bodyType = computeBodyType();
}
}
public class Block extends SpriteBody {
@Override
protected BodyType determineBodyType() {
// ... TODO ...
}
}
Это говорит, наследование немного минное поле, и такого рода подход может привести к сложной связи между базовым классом и дочерних классов, которые могут сделать это очень трудно, чтобы убедиться, что все дочерние классы ведут себя корректно и сохраняют правильные инварианты. Поэтому, в то время как вышесказанное совершенно справедливо, может потребоваться второй взгляд, чтобы увидеть, можете ли вы выполнить свои цели, используя композицию, а не наследование.
Смежные вопросы
- 1. Вызов метода унаследованного класса из Java
- 2. Отладка Java Eclipse: отслеживание унаследованного класса var
- 3. Метод переопределения из унаследованного класса
- 4. Инициирование унаследованного класса из строки
- 5. Полиморфизм: доступ к переменной унаследованного класса
- 6. Добавление переменной-члена унаследованного класса в Python
- 7. Изменение родительского класса переменной
- 8. Получение переменных из унаследованного класса в C#
- 9. Изменение класса переменной типа в подклассе Java
- 10. Копировать значение из объекта базового класса объекта унаследованного класса
- 11. Изменение значения переменной класса
- 12. Изменение атрибута класса переменной
- 13. Изменение переменной импортированного класса
- 14. Редактировать методы унаследованного класса
- 15. расположение памяти унаследованного класса
- 16. Получить FieldInfo унаследованного класса
- 17. Casting XML унаследованного класса
- 18. Формат конструктора унаследованного класса
- 19. Унаследованная коллекция унаследованного класса
- 20. C# - загрузка унаследованного класса
- 21. Возвращаясь тип унаследованного класса
- 22. конструктор копирования унаследованного класса
- 23. Создание класса, не унаследованного
- 24. Указатель базового класса против унаследованного указателя класса?
- 25. Изменение переменной класса по событию
- 26. Изменение статической переменной класса из другого класса/модуля
- 27. Изменение значения переменной класса из-за активности
- 28. Изменение значения переменной из другого класса
- 29. Изменение переменной из другого класса C#
- 30. Не создавать экземпляр унаследованного класса из абстрактного класса
Можете ли вы показать пример кода? Попробуйте добавить к нему комментарии. –
Как ваш текущий код не работает на вас? Пожалуйста, покажите это. –
Защищенные переменные экземпляра, определенные в суперклассе, наследуются подклассом, поэтому вам не нужно ничего делать для доступа к нему. –