Я долго размышлял об этом упражнении, и я не могу окунуться в суть вопроса. В разделе рассказывается о расширенных классах и порядке, в котором происходят события, когда объект построен из расширенного класса.Учебное пособие по программированию на языке Java 4-е издание 3.3
Когда объект создается, память выделяется для всех его полей, в том числе, унаследованные от суперкласса, и эти поля установлены по умолчанию начальные значения для соответствующих типов (ноль для всех числовых типов, ложных для boolean, '\ u0000' для char и null для ссылок на объекты). После этого конструкция имеет три фазы :
- Вызовите конструктор суперкласса.
- Инициализация полей с использованием их инициализаторов и любых блоков инициации.
- Выполнить тело конструктора.
...
Упражнение 3.3: Если бы это было важно установить эти маски, используя значения из расширенного класса во время строительства, как вы могли бы работать вокруг этих проблем?
Код:
class X {
protected int xMask = 0x00ff;
protected int fullMask;
public X() {
fullMask = xMask;
}
public int mask(int orig) {
return (orig & fullMask);
}
}
class Y extends X {
protected int yMask = 0xff00;
public Y() {
fullMask |= yMask;
}
}
Что вы думаете? – duffymo
Что подразумевается под упражнением? – London
Понимание порядка выполнения действий при создании дочерних классов.Моим наивным ответом было бы «переместить yMask до суперкласса». – duffymo