Иллюстрированный самоучитель по программированию мобильных телефонов

Конструктор суперкласса

В рассмотренном примере по созданию суперкласса и подкласса Nokia, умышленно использовался конструктор по умолчанию. Ситуация с конструкторами суперклассов требует отдельного внимания.

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

Рассмотрим небольшой пример.

// суперкласс Nokia
class Nokia
{
// конструктор суперкласса Nokia
// тело класса Nokia }
// подкласс NokiaSeries60 class NokiaSeries60
extends Nokia
{
// конструктор подкласса NokiaSeries60
NokiaSeriesGO(int a, int b);
// тело подкласса NokiaSeries60
}
// подкласс Nokia6600 для суперкласса NokiaeSeries60
class Nokia6600
extends NokiaSeries60
{
// конструктор подкласса Nokia6600
Nokia6600 (short f, short b, short c)
{
super (a, b)
// тело конструктора
}
}
// подкласс Nokia6100 для суперкласса NokiaeSeries60
class Nokia6100 extends NokiaeSeries60
{
//конструктор подкласса Nokia6100
Nokia6100 (char a, char b)
{
super (a, b)
// тело конструктора
}
// тело подкласса Nokia6100
}

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

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

// суперкласс Siemens
class Siemens
{
int a, b;
}
// подкласс SiemensMC62
class SiemensMC62 extends Siemens
{
int a, b;
// конструктор подкласса SiemensMC62
SiemensMC62 (int c, int d)
{
super.a = с;
// для а в суперклассе
super.b = d;
// для b в суперклассе a = с;
// для а подкласса b = d;
// для b п <strong>о</strong> дкласса
}
}

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

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

Подводя итог темы наследования необходимо упомянуть о классе Object. В языке Java все классы наследуются от большого суперкласса Objec. Это происходит автоматически и беспокоится о явном наследовании при помощи ключевого слова extends не нужно.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.