русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

SmallColorSquare


Дата добавления: 2015-06-12; просмотров: 537; Нарушение авторских прав


Выражение super может стоять только на первой строке конструкто­ра. Часто можно увидеть конструкторы вообще без такого выражения. В этом случае компилятор первой строкой по умолчанию добавляет вызов родительского конструктора без параметров (super()). Если у родитель­ского класса такого конструктора нет, выражение super обязательно должно быть записано явно (и именно на первой строке), поскольку не­обходима передача входных параметров.

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

Класс обязательно должен иметь конструктор, иначе невозможно порождать объекты ни от него, ни от его наследников. Поэтому если в классе не объявлен ни один конструктор, компилятор добавляет один по умолчанию. Это public-конструктор без параметров и с телом, опи­санным парой пустых фигурных скобок. Из этого следует, что такое возможно только для классов, у родителей которых объявлен конструк­тор без параметров, иначе возникнет ошибка компиляции. Обратите внимание, что если затем в такой класс добавляется конструктор (не важно, с параметрами или без), то конструктор по умолчанию больше не вставляется:

*Этот класс имеет один конструктор.

7 public class One {

// Будет создан конструктор по умолчанию

// Родительский класс Object имеет

// конструктор без параметров. }

*Этот класс имеет один конструктор.

V public class Two {// Единственный конструктор класса Second.

// Выражение new Second() ошибочно!

public Second(int х) {} }

*Этот класс имеет два конструктора.

public class Three extends Two { public ThreeO {super(1); // выражение super требуется }



public Three(lnt x) {super(x); // выражение super требуется } }

Если класс имеет более одного конструктора, допускается в первой строке некоторых из них указывать не super, а this - выражение, вызыва­ющее другой конструктор этого же класса.

Рассмотрим следующий пример:

public class Vector { private int vx, vy; protected double length;

public Vector(int x, int y) {superO; vx=x; vy=y;

length=Math.sqrt(vx*vx+vy*vy); }

public Vector(int x1, int y1, int x2, Int у2) {superO;

vx=x2-x1;

vy=y2-y1;

length=Math.sqrt(vx*vx+vy*vy); } }

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

public class Vector { private Int vx, vy; protected double length;

public Vector(int x, Int y) {superO;

vx=x;

vy=y;

length=Math.sqrt(vx*vx+vy*vy); }

public Vector(jnt x1, int y1, int x2, Int у2) {this(x2-x1,y2-y1); } }

Большим достоинством такого метода записи является то, что уда­лось избежать дублирования идентичного кода. Например, если процесс инициализации объектов этого класса удлинится на один шаг (скажем, до­бавится проверка длины на ноль), то такое изменение надо будет внести только в первый конструктор. Такой подход помогает избежать случай­ных ошибок, так как исчезает необходимость тиражировать изменения в нескольких местах.

Разумеется, такое обращение к конструкторам своего класса не должно приводить к зацикливаниям, иначе будет выдана ошибка компиляции. Цепочка this должна в итоге приводить кsuper, который должен присутствовать (явно или неявно) хотя бы в одном из конструкторов. По­сле того, как отработают конструкторы всех родительских классов, будет продолжено выполнение каждого конструктора, вовлеченного в процесс создания объекта.

public class Test { public TestO {System.out.println('Test()"); }

public Test(int x) {thisO;

System.out.println('Test(intx)"); } }

После выполнения выражения new Test(O) на консоли появится:



<== предыдущая лекция | следующая лекция ==>
Объявление методов | Инициализаторы


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.228 сек.