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;

int digit;

// конструктор подкласса

MyChildClass (String text, int number, char letter, int digit) {

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

super (text, number);

this. letter=letter;

this. digit=digit;

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

}

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

void show () {

// Выводим на печать значения всех полей объекта

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

System.out.println («text="+this. text);

System.out.println("number="+this.number);

System.out.println («letter="+this. letter);

System.out.println («digit="+this. digit);

}

}

public class Listing7_2 {

public static void main (String [] args) {

// создаем объект подкласса

// и передаем аргументы в конструктор подкласса

MyChildClass obj=new MyChildClass («Hello», 200,«S», 5);

obj.show ();

}

}

В описании родительского класса MyParentClass присутствует конструктор с двумя аргументами. Конструктор получает в виде аргументов строку и целое число, которые присваивает полям объекта.


Отступление: ключевое слово this

Ключевое слово this может использоваться, как ссылка на объект, из которого вызывается метод. Если this используется в конструкторе, то является ссылкой на создаваемый объект, или применяется при вызове одной версии конструктора из другой версии конструктора.

В данной программе имена аргументов конструктора совпадают с именами полей класса. Аргументы методов и конструкторов являются локальными переменными. Если имя локальной переменной совпадает с именем поля класса, то по умолчанию считается, что речь идет о локальной переменной, а не о поле. Чтобы в такой ситуации обратиться к полю, нужно указать его полное имя, включая имя объекта через точку. Вместо указания полного имени объекта в конструкторах и методах применяют универсальное ключевое слово this («этот» –