it_vse (519823), страница 53
Текст из файла (страница 53)
Таким образом, эти два классаимеют много общего. При создании иерархии объектов, вышестоящий иподчиненный объекты могут не иметь ничего общего, но один объект подчиПодчиненный объектняется другому, т.е. доступ к свойствам и методам подчиненного объектавозможен через свойство вышестоящего объекта. Проводя аналогию с жизнью: сын похож на отца, ноначальник и подчиненный не обязательно из одной семьи.
Хочется также подчеркнуть уже прозвучавшуюразницу: наследование – для классов, иерархия – для объектов, т.е. для экземпляров класса. Иерархиязадается путем описания в классе вышестоящего объекта свойства, создающего подчиненный объект, вклассе которого может быть также описано свойство, создающее объект еще более низкого уровня иерархиии т.д.
Тогда, создав вышестоящий объект, вы автоматически создаете дерево подчиненных объектов. Впримере ниже, описан объект 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.
Использование пакетовДля того, чтобы в одном классе можно было использовать другой класс, необходимо импортировать этоткласс при помощи директивы import. Пример: import avtomobil; . Однако вы видите, что во всех приведенных ранее примерах этого не сделано. Объясняется это тем, что директиву import можно опустить, еслифайл класса находится в том же каталоге. Директива import используется, в основном, для импорта классовиз пакетов.Рассмотрим понятие пакета. Как известно, каждый класс помещается в отдельный файл класса.Большое количество файлов классов напоминает жесткий диск без каталогов или папок, поэтому файлыклассов должны быть некоторым образом организованы. Для объединения исходных текстов файловклассов в один файл используются пакеты.
Они напоминают библиотеки, имеющиеся во многих языках.Помимо того, что пакеты позволяют логически сгруппировать классы, они еще снимают проблемусовпадения имен классов. Допустим, что есть два пакета "маляры" и "художники" и в рамках каждогопакета описан класс "кисточка" (очевидно, что малярная кисть отличается от кисти художника).
Если быпакетов не существовало, то возник бы конфликт, т.к. существует два класса с одинаковым именем.Использование пакетов снимает эту проблему, т.к. теперь доступ к классам будет организован так:"маляры.кисточка" и "художники.кисточка".Для того чтобы включить класс в пакет, нужно при его объявлении использовать оператор package,который должен быть первым оператором в файле. Другими словами, перед этим оператором могут бытькомментарии и пробелы, но ничего больше. Пример: Ляхевич А.Г., 2000 - 2002 годВерноНеверноpackage tachki;import java.awt.*;import java.io.*;import java.awt.*;import java.io.*;package tachki;class avtomobil {long nomer;void poehal ( ) { System.out.println (" Еду "); }}class avtomobil {long nomer;void poehal ( ) { System.out.println (" Еду "); }}class mercedes extends avtomobil {void poehal ( ){ System.out.println (" Еду быстро …"); }void marka ( ){ System.out.println (" Шестисотый мерс!"); }}class mercedes extends avtomobil {void poehal ( ){ System.out.println (" Еду быстро …"); }void marka ( ){ System.out.println (" Шестисотый мерс!"); }}Для использования класса из пакета, необходимо импортировать его, или импортировать пакет целиком.Синтаксис:import имя_пакета .
имя_класса// импортировать один классimport имя_пакета . *// импортировать все классы из пакетаПример:import tachki . mercedes;import tachki . * ;Можно и не импортировать пакет, тогда для использования класса придется указывать его полное название,включая имя пакета, что неудобно: tachki.mercedes moya_tachka = new tachki.mercedes ( );Также желательно не импортировать большие пакеты целиком, а ограничиться только теми классами,которые действительно нужны:1) При импорте пакета целиком виртуальная машина Java должна отслеживать имена всех элементов,имеющихся в пакете.
На это расходуется дополнительная оперативная память. Кроме того, в этом случаенемного снижается быстродействие системы2) Если импортируется несколько пакетов и окажется, что они имеют совпадающие имена файлов классов,то возникнет конфликт: какой же класс все-таки использовать?3) Самый главный минус связан с пропускной способностью Internet-соединения.
Когда вы целикомимпортируете пакеты, отсутствующие на вашем компьютере, то перед тем, как продолжить работу, браузердолжен загрузить через сеть все файлы классов для целого пакета. Если в пакете имеется 30 классов, аиспользуются только два, будут напрасно расходоваться значительные ресурсы и время пользователя.8.8. ИнтерфейсыВ языке Java отсутствует множественное наследование, т.е. любой объект может порождаться только отодного объекта. Но иногда надо, чтобы объект унаследовал не только свойства и методы родителя, но исвойства и методы другого объекта. Для этих целей используются интерфейсы – классы, в которыхобъявлены, но не описаны методы. Класс, реализующий интерфейс, должен сам описать реализациюметодов интерфейса.
При описании методов интерфейсов, можно не указывать модификаторы доступа, всеони по умолчанию рассматриваются как public. Другие модификаторы доступа в описании методовинтерфейса использовать нельзя. В интерфейсах также нельзя использовать переменные, не являющиесяконстантами (final). Любые поля интерфейса, вне зависимости указаны модификаторы доступа или нет,рассматриваются как public, final и static.Синтаксис объявления интерфейса следующий:public interface имя_интерфейса extends список_интерфейсов{ /* объявление свойств, объявление методов без описания их реализации */ }Пример:public interface Radio {final String nazvanie = "Автомобильный радиоприемник"; // описание константыpublic long Volna( );// описание метода}Интерфейс применяется к объекту при помощи ключевого слова implements (синтаксис см.
выше). Пример:class mercedes extends avtomobil implements Radio – к классу mercedes применяется интерфейс Radio. Ляхевич А.Г., 2000 - 2002 год8.9. Арифмитические и логические операции. Циклы и управляющие операторы.Арифметические и логические операцииОперацияОписаниеx=3Присвоить переменной x значение 3.+, -, *, /, %Сложение, вычитание, умножение, деление и деление по модулю (определение остаткаот деления).Увеличить x на единицу, уменьшить x на единицу.x ++, x -+=, -=, *=, /=x == 3x != 3<,<=,>,x|yСложение, вычитание, умножение и деление с присваиванием.x+=3 аналогично команде x=x+3.Операция равенства: x равен 3. Используется в конструкции IF..ELSE и др.Пример: if (x==3) { //действия };Операция неравенства: x не равен 3.>= Операции отношений: меньше, меньше или равно, больше, больше или равно.x&yПоразрядная операция ИЛИ (OR).
Результатом является число, полученное всоответствии с таблицей истинности для ИЛИ. Пример:x: 00001010 = 10y: 00001100 = 12Результат: 00001110 = 14Поразрядная операция И (AND).x^yПоразрядная операция исключающее ИЛИ (XOR).~xПоразрядное логическое отрицание НЕ (NOT).&=,|=, ^=x||yПоразрядные операции с присваиванием: x&=y аналогично x=x&yx && yЛогическая операция ИЛИ (OR). В отличие от поразрядных операций, результатлогической операции не число, а только значение ИСТИНА или ЛОЖЬ.