Студопедия  
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Интерфейс

Читайте также:
  1. SPI интерфейс
  2. Беспроводные интерфейсы подключения
  3. Вложенные интерфейсы
  4. Глава 2.2. Графические интерфейсы пользователя в Java
  5. Графический пользовательский интерфейс
  6. Для ссыпки на объект используйте его интерфейс
  7. Интерфейс Centronix.Сигналы интерфейса, используемые для работы с принтерами.
  8. Интерфейс Collection
  9. Интерфейс FAR

— Это явно указанная спецификация набора методов, которые должны быть представлены в классе, который реализует эту спецификацию. Реализация же этих методов в интерфейсе отсутствует. Подобно абстрактным классам интерфейсы обладают замечательным дополнительным свойством — их можно многократно наследовать. Конкретный класс может быть наследником лишь одного суперкласса, но зато в нем может быть реализовано неограниченное число интерфейсов.

Интерфейсы Java созданы для поддержки динамического выбора (resolution) методов во время выполнения программы. Интерфейсы похожи на классы, но в отличие от последних у интерфейсов нет переменных представителей, а в объявлениях методов отсутствует реализация. Класс может иметь любое количество интерфейсов. Все, что нужно сделать — это реализовать в классе полный набор методов всех интерфейсов.

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

 

Определение интерфейса сходно с определением класса, отличие состоит в том, что в интерфейсе отсутствуют объявления данных и конструкторов.

interface имя {

тип_результата имя_метода1(список параметров);…

тип имя_final1-переменной = значение;}

 

У объявляемых в интерфейсе методов отсутствуют операторы тела. В интерфейсе можно объявлять и переменные, при этом они неявно объявляются final - переменными. Это означает, что класс реализации не может изменять их значения.

Пример:

interface New_interface_1 {public double metod1();}

 

Оператор implements — это дополнение к определению класса, реализующего некоторый интерфейс(ы).

class имя_класса extends суперкласс implements интерфейс0, интерфейс1...{ тело класса}

Пример:

interface New_interface_1 {public double metod1();}

 

class Podklass3 extends New_class_1 {

public double metod1(){return super.metod1();}

}

class Podklass4 extends New_class_1 {

public double metod1(){return super.metod1() - inner.metod1();}

}

 

class New_class_1 implements New_interface_1 {

public New_interface_1 inner;

public double width, height, length;

public double metod1(){return width*height*length;}

}

 

class New_interface {

public static void main(String[] args) {

Podklass3 a = new Podklass3();

a.width = 1.0; a.height = 2.0; a.length = 3.0;

Podklass4 b = new Podklass4();

b.width = 10.0; b.height = 20.0; b.length = 30.0;

b.inner = a;

System.out.println("Объем ящика: " + a.metod1());

System.out.println("Объем комнаты: " + b.metod1());

}

}

Результат:

Объем ящика: 6.0

Объем комнаты: 5994.0

 

10. Для чего нужно преобразование типов? Привести примеры нисходящего и восходящего преобразования типов.

Иногда возникают ситуации, когда у вас есть величина какого-то определенного типа, а вам нужно ее присвоить переменной другого типа. Для некоторых типов это можно проделать и без приведения типа, в таких случаях говорят об автоматическом преобразовании типов. В Java автоматическое преобразование возможно только в том случае, когда точности представления чисел переменной-приемника достаточно для хранения исходного значения. Такое преобразование происходит, например, при занесении литеральной константы или значения переменной типа byte или short в переменную типа int. Это называется расширением или повышением, поскольку тип меньшей разрядности расширяется (повышается) до большего совместимого типа. Размера типа int всегда достаточно для хранения чисел из диапазона, допустимого для типа byte, поэтому в подобных ситуациях оператора явного приведения типа не требуется. Обратное в большинстве случаев неверно, поэтому для занесения значения типа int в переменную типа byte необходимо использовать оператор приведения типа. Эту процедуру иногда называют сужением (narrowing), поскольку вы явно сообщаете транслятору, что величину необходимо преобразовать, чтобы она уместилась в переменную нужного вам типа. Для приведения величины к определенному типу перед ней нужно указать этот тип, заключенный в круглые скобки.

Приммеры:

Приведение типа источника (переменной типа int) к типу приемника (переменной типа byte):

int a = 100; a=(byte) a; // a=100

Если бы при такой операции целое значение выходило за границы допустимого для типа byte диапазона, оно было бы уменьшено путем деления по модулю на допустимый для byte диапазон (результат деления по модулю на число — это остаток от деления на это число).

int a = 130; a=(byte) a; // a=–126, т.к. значение 130 выходит за пределы значений byte

 

Автоматическое преобразование типов в выражениях

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

Например:

byte a = 40, b = 50, с = 100;

int d = a* b / с;

Результат промежуточного выражения (а* b) вполне может выйти за диапазон допустимых для типа byte значений. Именно поэтому Java автоматически повышает тип каждой части выражения до типа int, так что для промежуточного результата (а* b) хватает места.

 

Автоматическое преобразование типа иногда может оказаться причиной неожиданных сообщений транслятора об ошибках: byte b = 50; b = b* 2; Из-за автоматического преобразования типа результата в int мы получаем сообщение об ошибке от транслятора — ведь при занесении int в byte может произойти потеря точности. Необходимо явное преобразование int в byte:

byte b = 50; b = (byte) (b* 2);

 

Если в выражении используются переменные типов byte, short и int, то во избежание переполнения тип всего выражения автоматически повышается до int. Если же в выражении тип хотя бы одной переменной — long, то и тип всего выражения тоже повышается до long.

Если выражение содержит операнды типа float, то и тип всего выражения автоматически повышается до float. Если же хотя бы один из операндов имеет тип double, то тип всего выражения повышается до double. По умолчанию Java рассматривает все литералы с плавающей точкой, как имеющие тип double.

Значения типа boolean возвращаются в качестве результата всеми операторами сравнения, например (а < b).

 

11. Что такое переменная?

Переменная — это хранилище данных определенного типа, обычно имеющее уникальное имя. Переменная всегда содержит значение, которое совместимо по присваиванию с ее типом. Значение переменной изменяется операцией присваивания или операциями префиксного/постфиксного инкремента/декремента.

 

В Java существуют семь разновидностей переменных:

 

Переменная класса — это статическое поле данных в декларации класса или любое поле данных в декларации интерфейса. Переменная класса создается при загрузке ее класса или интерфейса; сразу после создания ей присваивается значение по умолчанию. Переменная класса уничтожается, когда ее класс или интерфейс выгружается (после завершения, его финализации).

Переменная реализации — это поле данных в декларации класса, которое не является статическим. Такая переменная создается и получает значение по умолчанию при создании экземпляра данного класса или класса, который является его потомком. Переменная реализации уничтожается, когда соответствующий экземпляр класса удаляется процедурой сборки мусора (после завершения его финализации).

Элементы массива — это неименованные переменные, которые создаются и получают значение по умолчанию при создании массива. Эти переменные уничтожаются, когда массив удаляется процедурой сборки мусора.

Параметры конструктора — это имена значений аргументов, передаваемых конструктору. Для каждого параметра в декларации конструктора создается новая переменная каждый раз, когда вызывается данный конструктор (явно или неявно). Этой переменной присваивается фактическое значение аргумента, переданное конструктору при вызове. Переменная уничтожается после завершения выполнения тела конструктора.

Параметры метода — это имена значений аргументов, передаваемых методу. Для каждого параметра в декларации метода создается новая переменная каждый раз, когда вызывается данный метод. Этой переменной присваивается фактическое значение аргумента, переданное методу при вызове. Переменная уничтожается после завершения выполнения тела метода.

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

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

 

Примеры реализации переменных:

boolean b; byte b; short s; int i; long l; char c; float f; double d;

Объект — это либо экземпляр класса, либо массив. Значениями ссылочного типа служат ссылки на объекты, которые часто называются также указателями. На один объект может указывать любое количество ссылок. Если две переменные указывают на один объект, то состояние объекта может быть изменено через первую ссылку, а затем прочитано через вторую.

class Point { static int numPoints; // numPoints - переменная класса int x, y; // x и y - переменные реализации int[] w = new int[10]; // w - массив целых чисел, w[0] - элемент массива int setX(int x) { // x - параметр метода int oldx = this.x; // oldx - локальная переменная this.x = x; return oldx; }}

 

Перед тем, как к переменной можно будет обращаться, ей должно быть присвоено значение.

 

Каждой переменной класса, переменной реализации и каждому элементу массива при создании присваивается значение по умолчанию следующим образом:

переменные типов byte, short, int, long получают значение 0 соответствующего типа;

переменные типов float и double получают значение +0 соответствующего типа;

переменные типа char получают значение '\u0000';

переменные типа boolean получают значение false;

переменные ссылочных типов получают значение null;

Каждому параметру метода и конструктора присваивается фактическое значение соответствующего аргумента, определенное в момент вызова данного метода или конструктора.

Параметр обработчика исключений инициализируется соответствующим объектом.

Локальной переменной перед ее использованием должно быть присвоено значение либо инициализацией в декларации, либо оператором присваивания.

 




Дата добавления: 2015-09-11; просмотров: 26 | Поможем написать вашу работу | Нарушение авторских прав

Апплеты | Создание HTML-страницы для вывода апплета | Class First | Package имя_пакета; | FlowLayout, BoxLayout, BorderLayout, CardLayout, GridLayout, GridBagLayout, SpringLayout, null | Назвать модели обработки исключений и написать для каждой из них шаблон кода. | Перечислите состояния потоков. | Класс String | Класс Runtime | Класс TreeSet |


lektsii.net - Лекции.Нет - 2014-2024 год. (0.012 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав