2017-02-11 3 views
-2

все это может показаться немного странным, но я хочу установить значение переменной суперкласса и установить его равным тому, что будет в подклассе. Например, у меня есть абстрактный класс, называемый SpriteBody, а в методе def я хочу установить переменную bodyType на то, что определено в Block, которое расширяет SpriteBody, как я могу сделать что-то вроде этого? Я мог бы сделать это наоборот, установив значение суперкласса и используя переменную в методе суперкласса, но я мог бы написать меньше кода, если бы мог сделать это первым способом.Изменение переменной класса java из унаследованного класса

+1

Можете ли вы показать пример кода? Попробуйте добавить к нему комментарии. –

+0

Как ваш текущий код не работает на вас? Пожалуйста, покажите это. –

+0

Защищенные переменные экземпляра, определенные в суперклассе, наследуются подклассом, поэтому вам не нужно ничего делать для доступа к нему. –

ответ

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 ... 
    } 
} 

Это говорит, наследование немного минное поле, и такого рода подход может привести к сложной связи между базовым классом и дочерних классов, которые могут сделать это очень трудно, чтобы убедиться, что все дочерние классы ведут себя корректно и сохраняют правильные инварианты. Поэтому, в то время как вышесказанное совершенно справедливо, может потребоваться второй взгляд, чтобы увидеть, можете ли вы выполнить свои цели, используя композицию, а не наследование.

Смежные вопросы