Программирование на JAVA
Меню :
Стартовая
Основы программирования
Программирование на JAVA
Программирование на C++
Программирование на Pascal
Задачи по программированию
float f=2e9f ;
print((int)(char)f);
print((int)(char)-f);
Результатом будет:
37888 27648
Обратите внимание на двойное приведение для значений типа char в двух последних примерах. Понятно, что преобразование от char к int не приводит к потере точности, но позволяет распечатывать не символ, а его числовой код, что более удобно для анализа.
В заключение еще раз обратим внимание на то, что примитивные значения типа boolean могут участвовать только в тождественных преобразованиях.
Преобразование ссылочных типов (расширение и сужение)
Переходим к ссылочным типам. Преобразование объектных типов ■"Учите всего иллюстрируется с помощью дерева наследования. Рассмотрим Небольшой пример наследования:
// Объявляем класс Parent class Parent { intx;
}
// Объявляем класс Child и наследуем // его от класса Parent class Child extends Parent { int у;
}
// Объявляем второго наследника // класса Parent - класс Child2 class Child2 extends Parent { int z;
}
В каждом классе объявлено поле с уникальным именем. Будем рассматривать это поле как пример набора уникальных свойств, присущих некоторому объектному типу.
Три объявленных класса могут порождать три вида объектов. Объекты класса Parent обладают только одним полем х, а значит, только ссылки типа Parent могут ссылаться на такие объекты. Объекты класса Child обладают полем у и полем х, полученным по наследству от класса Parent. Стало быть, на такие объекты могут указывать ссылки типа Child или Parent. Второй случай уже иллюстрировался следующим примером:
Parent р = new Child();
Обратите внимание, что с помощью такой ссылки р можно обращаться лишь к полю х созданного объекта. Поле у недоступно, так как компилятор, проверяя корректность выражения р.у, не может предугадать, что ссылка р будет указывать на объект типа Child во время исполнения программы. Он анализирует лишь тип самой переменной, а она объявлена как Parent, но в этом классе нет поля у, что и вызовет ошибку компиляции.
Аналогично, объекты класса Child2 обладают полем z и полем х, полученным по наследству от класса Parent. Значит, на такие объекты могут указывать ссылки типа Child2 или Parent.
Таким образом, ссылки типа Parent могут указывать на объект любого из трех рассматриваемых типов, а ссылки типа Child и Child2 - только