Оценить:
 Рейтинг: 3.5

Java за неделю. Вводный курс

Год написания книги
2018
<< 1 ... 20 21 22 23 24 25 >>
На страницу:
24 из 25
Настройки чтения
Размер шрифта
Высота строк
Поля

// вызываем методы суперкласса

objParent.showNumber ();

objParent.showText ();

// вызываем методы подкласса

objChild.showNumber ();

objChild.showText ();

// вызываем дополнительный метод подкласса

int b=objChild.sum (12);

// выводим результат вызова метода на печать

System.out.println (b);

}

}

В данном примере мы описали класс MyParentClass, в котором определены два поля – целочисленное и текстовое, а также два метода для вывода этих полей на печать.

Допустим, что при использовании одного из объектов класса нам приходится регулярно суммировать некие числа со значением целочисленного поля number. Очевидно, что для этого необходимо добавить метод, которого нет в описании класса. Конечно, можно было бы переписать класс MyParentClass, добавив в него новый метод. Но в случае, когда класс проверен, отлажен и применяется во многих других программах, не следует редактировать его по любому поводу, рискуя внести ошибку или путаницу в готовый код.

Для внесения изменений и дополнений мы воспользуемся механизмом наследования. Создадим подкласс MyChildClass, в котором опишем дополнительный метод sum (). Подкласс полностью наследует открытые поля и методы суперкласса, поэтому метод sum () свободно обращается к полю number. Это поле объявлено и существует, хотя и не упомянуто в явном виде при описании подкласса.

Далее, в главном методе программы мы создаем объект суперкласса objParent и объект подкласса objChild. Еще раз подчеркну, что это абсолютно равноправные и независимые объекты. Разница лишь в том, что объект objChild располагает методом sum (), которого нет у объекта objParent.

Убедимся в том, что свойства объектов именно такие, как ожидалось. Сначала выведем на печать содержимое полей объекта objParent:

objParent.showNumber ();

objParent.showText ();

Затем выведем на печать содержимое полей объекта objChild:

objChild.showNumber ();

objChild.showText ();

Результат выполнения этих блоков команд будет одинаковым, потому что реализовано наследование полей:

5

Hello

5

Hello

Теперь для объекта objChild вызовем метод sum () и выведем результат работы метода на печать. Как видите, подкласс MyChildClass успешно расширил суперкласс MyParentClass при помощи нового метода. Благодаря наследованию мы можем произвольно редактировать дополнительные поля и методы, не затрагивая исходный суперкласс.

7.1.1 Конструктор подкласса

Давайте вспомним, что такое конструктор класса, о котором подробно говорилось в разделе 6.2.3. Зачастую при создании объекта необходимо присвоить его полям начальные значения. Поскольку можно создать несколько объектов одного класса, то их поля могут быть инициализированы разными значениями. Для этого в классе должен быть описан специальный метод (конструктор), который срабатывает в момент создания объекта, получает аргументы и выполняет нужные действия.

При создании объекта подкласса ситуация сложнее – сначала вызывается конструктор суперкласса, и мы должны как-то передать ему аргументы. Для этого в теле конструктора подкласса первой командой следует указать вызов конструктора суперкласса при помощи ключевого слова super с круглыми скобками. В скобках указывают аргументы, которые передаются конструктору суперкласса. Если аргументов нет, оставляют пустые скобки.

В листинге 7.2 приведен пример использования конструктора подкласса. Обратите внимание на то, как происходит обращение к полям при помощи нового для вас ключевого слова this.

Листинг 7.2 Использование конструктора подкласса

// описание суперкласса

class MyParentClass {

// поля родительского класса

String text;

int number;

// конструктор родительского класса

MyParentClass (String text, int number) {

// присваиваем полям значения аргументов

this. text=text;

this.number=number;

// выводим значения полей на печать

System.out.println («Сработал конструктор суперкласса!»);

}

}

// описание подкласса

class MyChildClass extends MyParentClass {

char letter;
<< 1 ... 20 21 22 23 24 25 >>
На страницу:
24 из 25