Программирование на JAVA
Меню :
Стартовая
Основы программирования
Программирование на JAVA
Программирование на C++
Программирование на Pascal
Задачи по программированию
Хотя массивы являются объектными типами, их также будет полезно разделить п° базовому типу на две группы - основанные на примитивном или ссылочном типе.
Имейте в виду, что переходы между массивами и примитивными т11' пами являются запрещенными. Преобразования между массивами и ДР>" гими объектными типами возможны только для класса Object и интеР' фейсов Cloneable и Serializable.. Массив всегда можно привести к эти>'
М типам, обратный же переход является сужением и должен произво-1*1-ся явным образом по усмотрению разработчика. Таким образом, ин-пес представляют только переходы между разными типами массивов. ^евИдно, что массив, основанный на примитивном типе, принципиально цельзя преобразовать к типу массива, основанному на ссылочном типе, и наоборот.
Пока не будем останавливаться на этом подробно, однако заметим, уф преобразования между типами массивов, основанных на различных примитивных типах, невозможны ни при каких условиях.
.;, Для ссылочных же типов такого строгого правила нет. Например, ес-дЯ/СОЗДать экземпляр массива, основанного на типе Child, то ссылку на него можно привести к типу массива, основанного на типе Parent.
Child с[] = newChild[3]; Parent р[] = с;
Вообще, существует универсальное правило: массив, основанный на типе А, можно привести к массиву, основанному на типе В, если сам тип А Приводится к типу В.
4 // если допустимо такое приведение: Bb = (B)newA();
//то допустимо и приведение массивов: Bb[]=(B[]) newA[3];
; Применяя это правило рекурсивно, можно преобразовывать многомерные массивы. Например, массив Child[][] можно привести к Parent[][], так как их базовые типы приводимы (Child[] к Parent[]) также на основе этого правила (поскольку базовые типы Child и Parent приводимы в силу правил наследования).
Как обычно, расширения можно проводить неявно (как в предыдущем примере), а сужения - только явным приведением.
* Вернемся к массивам, основанным на примитивном типе. Невозможность их участия в преобразованиях типов связана, конечно, с различиями м*Аду простыми и ссылочными типами данных. Поскольку элементами °®Ьектных массивов являются ссылки, они легко могут участвовать в при-^ении. Напротив, элементы простых типов действительно хранят число-Вь,еили булевские значения. Предположим, такое преобразование осуще-Ст»Имо: