Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ответы по java.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
237.57 Кб
Скачать

13. Объявление классов.

Объявление класса состоит из заголовка и тела класса.

Заголовок класса: Вначале указываются модификаторы класса. Допустимым является public, либо его отсутствие - доступ по умолчанию. Класс может быть объявлен как final. В этом случае не допускается создание наследников такого класса. На своей ветке наследования он является последним. Класс String и классы-

обертки, например, являются final-классами. После списка модификаторов указывается ключевое слово class, а затем имя класса - корректный Java-идентификатор. Указанный идентификатор становится простым именем класса. Полное составное имя класса строится из полного составного имени пакета, в котором он объявлен (если это не безымянный пакет), и простого имени класса, разделенных точкой. Область видимости класса, где он может быть доступен по своему простому имени - его пакет.

Далее заголовок может содержать ключевое слово extends, после которого должно быть указано имя (простое или составное) доступного не-final класса. В этом случае объявляемый класс наследуется от указанного класса. Если выражение extends не применяется, то класс наследуется напрямую от Object. Выражение extends Object допускается и игнорируется.

Тело класса: Тело класса может содержать объявление элементов (members) класса:

• полей;

• методов;

• внутренних типов (классов и интерфейсов);

и остальных допустимых конструкций:

• конструкторов;

• инициализаторов;

• статических инициализаторов.

14. Преобразование типов.

Для простых типов расширение означает, что осуществляется переход от менее емкого типа к более емкому. Например, от типа byte (длина 1 байт) к типу int (длина 4 байта). Такие преобразования безопасны в том смысле, что новый тип всегда гарантированно вмещает в себя все данные, которые хранились в старом типе, и таким образом не происходит потери данных. Именно поэтому компилятор осуществляет его сам, незаметно для разработчика:

byte b=3;

int a=b;

В последней строке значение переменной b типа byte будет преобразовано к типу переменной a (то есть, int) автоматически, никаких специальных действий для этого предпринимать не нужно.

Следующие 19 преобразований являются расширяющими:

* от byte к short, int, long, float, double

* от short к int, long, float, double

* от char к int, long, float, double

* от int к long, float, double

* от long к float, double

* от float к double

Обратите внимание, что нельзя провести преобразование к типу char от типов меньшей или равной длины (byte, short), или, наоборот, к short от char без потери данных. Это связано с тем, что char, в отличие от остальных целочисленных типов, является беззнаковым.

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

Следующие 23 преобразования являются сужающими:

* от byte к char

* от short к byte, char

* от char к byte, short

* от int к byte, short, char

* от long к byte, short, char, int

* от float к byte, short, char, int, long

* от double к byte, short, char, int, long, float

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

print((byte)383);

print((byte)384);

print((byte)-384);

Результатом будет:

127

-128

-128