Лекции (989962), страница 53

Файл №989962 Лекции (Лекции) 53 страницаЛекции (989962) страница 532015-08-20СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 53)

Однако, болееоптимальное решение – это описать на уровне модуля private-переменную, а для чтения или записи еезначения использовать public-методы, называемые методами доступа. Метод доступа позволяет, передзаписью нового значения свойства, выполнить определенные действия: проверить значение свойства накорректность, автоматически пересчитать значения связанных свойств и т.д.

Пример:class Krug {private int radius;public void setRadius (int new_radius) {if (new_radius>0) {radius=new_radius;} else { System.out.println ("Некорректное значение радиуса"); }}public int getRadius ( ) { return ( radius ); } Ляхевич А.Г., 2000 - 2002 год}Конструкторы класса, перегрузка методов.Конструкторы класса – это специальные методы, которые вызываются при создании экземпляров классов.Обычно в этих методах содержатся операторы, которые позволяют проинициализировать значения свойствобъекта при его создании.

Для инициализации собственных свойств объекта используется ключевое словоthis (этот объект). Синтаксис: this.свойство = значение;Можно определять несколько конструкторов с различными наборами параметров. Тогда, присоздании экземпляра класса, будет возможность создавать объект, передавая ему различные наборыпараметров (перегружая конструкторы). При этом будет вызываться тот конструктор, у которого именнотакой набор параметров, который был указан при создании объекта. Перегружать можно не толькоконструкторы, но и любые методы класса.Имя конструктора должно совпадать с именем класса. Для конструктора не указывается типвозвращаемых им значений, т.к.

конструктор не может возвращать каких либо значений. Модификатордоступа конструктора всегда должен быть public. Конструкторы нельзя объявлять, как native, absract, static,synchronized или final. Пример:class Game {boolean vse_svoi; // Описание свойства "все свои"public Game (String Name) {this.vse_svoi=true; } /* инициализация свойства при создании объекта */public Game (int Chislo_igrokov) { this.vse_svoi=false; } /* инициализация свойства при создании объекта */public Game (String Name, int Chislo_igrokov) {/* операторы, выполняются при создании объекта */ }}Деструкторы класса (метод finalize)Метод finalize присутствует во всех объектах Java (он порожден от объекта java.lang.Object, от которогопорождены все объекты Java). Этот метод выполняется непосредственно перед "сборкой мусора", т.е. передтем, как объект будет уничтожен.

Пример:class Game {protected void finalize ( ) { System.out.println ("Игра окончена"); }}8.4. Создание экземпляра классаОписание класса – это просто описание свойств и методов объекта. При создании же экземпляра объекта(ключевое слово new), объект создается реально: анализируется описание класса, выделяется необходимаяпамять под объект, объект получает собственные копии всех не static свойств и методов класса и, в зависимости от переданных создаваемому классу параметров, срабатывает тот или иной конструктор класса,который выполняет заданные программистом операции по инициализации свойств объекта.

Можно создавать несколько экземпляров одного класса. При создании экземпляра класса, в используемые переменныепомещается указатель на созданный объект (см. переменные domino и shashki в примере ниже). На один итот же объект может существовать несколько указателей (см. переменную domino2 в примере ниже).Объект существует до тех пор, пока на него есть хотя бы одна ссылка, иначе он автоматически уничтожается Java ("сборка мусора").Синтаксис создания экземпляра класса следующий:Вариант 1 (предварительное описание, с последующим созданием):имя_описанного_класса имя_переменной;имя_переменной = new имя_описанного_класса (параметры_для_конструктора);Вариант 2 (создание в момент описания):имя_описанного_класса имя_переменной = new имя_описанного_класса (параметры_для_конструктора);Пример (предполагается, что класс Game описан раньше (см.

выше) ):public Class dvor {Game domino, domino2;// Описание переменных на уровне классаpublic dvor ( ) {//Конструктор класса dvordomino = new Game ("Домино", 6);/* Создается игра "домино" на 6 человек, срабатываетсоответствующий конструктор класса */Game shashki = new Game ("Шашки"); /* Создается игра "шашки", число участников и так известно.Т.к. список параметров другой, срабатывает конструктор, укоторого перечень параметров именно такой */domino2 = domino; /* За спинами доминошников появляются "болельщики", которые также лезут вигру – переменная domino2 указывает на тот же объект, что и domino.*/shashki = domino; /* В шашки играть бросают, и присоединяются к "болельщикам" доминошников:на объект "домино" уже 3 указателя: domino, domino2 и shashki, а объект"шашки" будет уничтожен при ближайшей "сборке мусора", т.к.

на него нетни одного указателя */} Ляхевич А.Г., 2000 - 2002 годpublic static void main(String args[ ] ) {// Выполнение программы всегда начинается с метода maindvor go = new dvor ( ); // Вызов конструктора dvor, который и выполнит основную часть программыSystem.gc ( ); // Принудительная "сборка мусора" ( gc = Garbage Collection )}}Приведенная выше программа начнет выполняться с метода main (как и любая исполняемая программа наJava), который вызовет создание экземпляра класса dvor. При создании экземпляра класса, будет вызванконструктор dvor ( ), который и выполнит основную часть программы. Такой прием применен из-за того,что метод main – статический, а из статического метода нельзя вызывать не статические методы и свойствадругих объектов (например, создавать объекты domino и shashki).8.5.

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

После того, как метод переопределен, доступ кпервоначальному варианту возможен с использованием специальной переменной super ( доступ:super.метод_родителя или super.свойство_родителя ), которая указывает на класс, от которого был порожденданный. Ниже приведен пример, в котором от класса avtomobil порождается класс mercedes, в которомпереопределен метод poehal и создан новый метод marka. Причем метод poehal переопределен так, чтосначала вызывается старый вариант метода (super.poehal ( ) ), а затем добавляются новые команды. Крометого, предусмотрена возможность перегрузки метода, т.е. вызова одного и того же метода, с различнымивариантами параметров.

Пример:class avtomobil {long probeg;// Задаем свойство "пробег"void poehal ( ) { System.out.println (" Еду "); } // Задаем метод "поехал" }class mercedes extends avtomobil {// Объект mercedes порожден от avtomobil/* Свойство probeg определять не надо, т.к. оно унаследовано. Метод poehal также не надо было быопределять, но мы хотим заменить реализацию этого метод на свою, т.е. переопределить метод.Кроме того, мы создаем возможность перегружать метод poehal, описывая различные реализации этогометода для различных наборов параметров */void poehal ( ) {super.poehal( );System.out.println (" Еду быстро …"); }void poehal ( String kuda ) {super.poehal( );System.out.println (" Еду "+kuda); }void marka ( ) { System.out.println (" Шестисотый мерс!"); } //Задаем новый метод marka}public class proga {public proga( ) {mercedes myCar = new mercedes ( );myCar.marka ( ); myCar.poehal( ); myCar.poehal( " в клуб"); }public static void main(String args[ ] ) { proga go = new proga (); }}8.6.

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

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

Тогда, создав вышестоящий объект, вы автоматически создаете дерево подчиненных объектов. Впримере ниже, описан объект mercedes, который содержит подчиненный объект koleso (свойство osi),Вышестоящий объект Ляхевич А.Г., 2000 - 2002 годкоторый, в свою очередь, содержит подчиненный объект болт (свойство zaklepki). При создании автомобиляавтоматически создаются колеса и болты. Доступ к подчиненным объектам происходит в формате:вышестоящий_объект . подчиненный_объект . свойства_подчиненного_объекта.package primer;class avtomobil {long probeg = 3;void poehal ( ) { System.out.println (" Еду "); }}class mercedes extends avtomobil {// Наследование от класса avtomobilvoid poehal ( ) { System.out.println (" Еду быстро "); }void marka ( ) { System.out.println (" Шестисотый мерс!"); }koleso osi = new koleso ();// Создание подчиненного объекта}class koleso {boolean zapaska=false;// Описание обычного свойства "запаска"bolt zaklepki = new bolt();// Создание подчиненного объекта}class bolt { int nomer_bolta = 100; }public class proga {mercedes myCar; // Описание переменной myCarpublic proga() {myCar = new mercedes ( ); // Создание вышестоящего объектаmyCar.marka ( );// Использование метода вышестоящего объектаmyCar.osi.zapaska = true; // Использование свойства объекта второго уровня иерархииmyCar.osi.zaklepki.nomer_bolta = 1; // Использование свойства объекта третьего уровня иерархии}public static void main(String args[ ] ) { // Запуск программыproga go = new proga ();}}8.7.

Характеристики

Тип файла
PDF-файл
Размер
6 Mb
Материал
Тип материала
Высшее учебное заведение

Список файлов лекций

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6353
Авторов
на СтудИзбе
311
Средний доход
с одного платного файла
Обучение Подробнее