44 / 44 / 11
Регистрация: 21.01.2013
Сообщений: 668

Как работает перегрузка для массивов?

03.03.2014, 21:09. Показов 2834. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Проходил тест, встретил непонятный вопрос
Java
1
2
3
4
5
6
7
8
9
10
class A{}
class B extends A{}
class C extends B{}
class D extends C{}
public class XLoad{
    public static void main(String args[]){
        A[] a=new C[1];
        a[0] = new B(); // здесь вываливается java.lang.ArrayStoreException
    }
}
Кто может объяснить какими правилами это регулируется?
1
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.03.2014, 21:09
Ответы с готовыми решениями:

Перегрузка operator+ для массивов
Здравствуйте. Мне надо решить следующую задачу: сложить два массива в один, используя перегрузку операторов(перегрузить operator+). У...

Перегрузка оператора + для объединения массивов
Здравствуйте! Мной был написан код, в котором создаётся класс и заполняются массивы. Для объединения бы использован третий массив с заранее...

Перегрузка оператора сравнения (==) для массивов
Имеется класс-массив. Нужно сравнить два массива при помощи перегрузки оператора (==) Помогите написать пожалуйста!!! class array ...

6
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
03.03.2014, 23:05
Лучший ответ Сообщение было отмечено gredwhite как решение

Решение

Почему можно писать так:
Java
1
A[] a=new C[1];
By design. В первых версиях java не было generic-ов. Такой подход позволял уменьшить повторение кода и был безопасен в случае, если не требовалась запись в массив.

Почему вылетает Exception:
Потому что такой код, абсолютно гарантированно не должен бросать исключений:
Java
1
2
3
C[] arr;
//...
C variable = arr[0];
Если бы исключение не вызывалось во время записи в массив, то оно бы тогда бросалось во время чтения, что привело бы к куда еще более печальным последствиям.

Добавлено через 28 секунд
PS. Правила - http://docs.oracle.com/javase/... ls-10.html
1
44 / 44 / 11
Регистрация: 21.01.2013
Сообщений: 668
04.03.2014, 00:23  [ТС]
Java
1
A[] a=new C[1];
Другими словами, это работает ибо С[] приводим к A[], но всё таки массив может хранить только объекты типа C и его наследников?

Добавлено через 23 минуты
========================================
ещё меня ужасно беспокоят генерики

List<? extends Number> ml = new Vector<Integer>();

я так понимаю ..... короче ничего я не понимаю

я не могу ничего добавить даже в такую коллекцию через ml ссылку.
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
04.03.2014, 08:40
gredwhite, generic-и это отдельная большая тема. Вот есть неплохая статья на русском - http://www.rsdn.ru/article/java/genericsinjava.xml
0
04.03.2014, 10:13

Не по теме:

Цитата Сообщение от gredwhite Посмотреть сообщение
List<? extends Number> ml = new Vector<Integer>();
Vector считается deprecated.

0
34 / 34 / 5
Регистрация: 25.02.2013
Сообщений: 221
06.03.2014, 17:50
Цитата Сообщение от Kastaneda Посмотреть сообщение
Vector считается deprecated.
Быть может в java 8 он стал таковым, но в версиях до 8 он таковым не являлся/является. Просто его очень редко используют.
0
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
06.03.2014, 20:29
Цитата Сообщение от Kastaneda Посмотреть сообщение
Vector считается deprecated.
так было раньше, но с некоторых пор он опять недепрекатнутый, так как провели его редизайн
просто он оверсинхронизирован, поэтому для обычных однопоточных задач излишне тормознутый
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.03.2014, 20:29
Помогаю со студенческими работами здесь

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

Перегрузка операции "*" для умножения одномерных массивов
Нужна помощь. Есть условие задачи: Выполните перегрузку операции &quot;*&quot; для умножения одномерных массивов. Заранее спасибо.

Не работает перегрузка функций для инициализации квадратной матрицы
Написать перегруженные функции (int, double, char) для выполнения следующих задач: - Инициализация квадратной матрицы; Своими силами...

Организовать ввод массивов как из текстовых файлов, так и с клавиатуры. Для представления массивов на экране использовать компоненты StringGrid, ListB
Разработать приложение в соответствии с заданием. Организовать ввод массивов как из текстовых файлов, так и с клавиатуры. Для представления...

Перегрузка операторов с участием массивов
Всем привет! Люди добрые, подскажите пожалста, как по кошерному вызвать оператор. Ситуация следующая: Есть массив MassThing...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

Новые блоги и статьи
Непрерывная интеграция для пакета Python
Mr. Docker 22.06.2025
Было 4 часа утра пятницы, когда я выпустил новую версию нашей внутренней библиотеки для обработки данных. Релиз 0. 5. 2 содержал небольшой фикс для обработки дат в ISO формате, что может пойти не так?. . .
Продвинутый ETL на C# из OLTP БД в хранилище
stackOverflow 22.06.2025
Работая в сфере корпоративной аналитики, я постоянно сталкиваюсь с одним и тем же - нужны чистые, структурированные и, главное, свежие данные. Без них современные аналитические системы, машинное. . .
Мастер-класс по микросервисам на Node.js
Reangularity 21.06.2025
Node. js стал одной из самых популярных платформ для микросервисной архитектуры не случайно. Его неблокирующая однопоточная модель и событийно-ориентированный подход делают его идеальным для. . .
Управление Arduino из WPF приложения
Wired 21.06.2025
Зачем вообще связывать Arduino с WPF-приложением? Казалось бы, у Arduino есть собственная среда разработки, своя экосистема, свои способы управления. Однако при создании серьезных проектов. . .
Звёздная пыль
kumehtar 20.06.2025
Я просто это себе представляю: как создавался этот мир. Как энергия слипалась в маленькие частички. Как они собирались в первые звёзды, как во вселенной впервые появился Свет. Как эти звёзды. . .
Создание нейросети с PyTorch
AI_Generated 19.06.2025
Ключевое преимущество PyTorch — его питоновская натура. В отличие от TensorFlow, который изначально был построен как статический вычислительный граф, PyTorch предлагает динамический подход. Это. . .
JWT аутентификация в ASP.NET Core
UnmanagedCoder 18.06.2025
Разрабатывая веб-приложения, я постоянно сталкиваюсь с дилеммой: как обеспечить надежную аутентификацию пользователей без ущерба для производительности и масштабируемости? Классические подходы на. . .
Краткий курс по С#
aaLeXAA 18.06.2025
Здесь вы найдете все необходимые функции чтоб написать програму на C# Задание 1: КЛАСС FORM 1 public partial class Form1 : Form { Spisok listin = new Spisok(); . . .
50 самых полезных примеров кода Python для частых задач
py-thonny 17.06.2025
Эффективность работы разработчика часто измеряется не количеством написаных строк, а скоростью решения задач. Готовые сниппеты значительно ускоряют разработку, помогают избежать типичных ошибок и. . .
C# и продвинутые приемы работы с БД
stackOverflow 17.06.2025
Каждый . NET разработчик рано или поздно сталкивается с ситуацией, когда привычные методы работы с базами данных превращаются в источник бессонных ночей. Я сам неоднократно попадал в такие ситуации,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru