Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
> /dev/null
 Аватар для Блеф
286 / 119 / 86
Регистрация: 14.05.2014
Сообщений: 767

Как понять данный код (Полиморфизм)?

06.11.2014, 11:40. Показов 1440. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Только начал учить java, до этого кодил на php. Есть код:
Строка 24
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public class Shape {
    public void draw() {
       //ничего не делаем
    }
}
public class Square extends Shape {
    public void draw() {
        System.out.println("Квадрат");
    }
}
 
public class Сircle extends Shape {
    public void draw() {
        System.out.println("Круг");
    }
}
 
public class Triangle extends Shape {
    public void draw() {
        System.out.println("Треугольник");
    }
}
 
Shape[] a = new Shape[]{new Shape(), new Triangle(), new Square(), new Сircle()}; //Эта строчка похожа на массив, только вместо типа тут стоит класс. Как правильно это понять? И что выходит в итоге? 
 
for(int i = 0; i < a.length; i++) {
    a[i].draw();
}
Заранее спасибо!
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.11.2014, 11:40
Ответы с готовыми решениями:

Не могу понять данный код
public class EchoTestDrive { public static void main(String args) { // TODO Auto-generated method stub Echo e1 = new Echo(); ...

Как понять поставленную задачу. Не могу понять этот полиморфизм?
A software academy teaches two types of courses: local courses that are held in some of the academy’s local labs and offsite courses held...

Функция min. Не могу понять, как нужно расписать данный код, но хочется всё подробно разузнать.
Помогите вычислить пример в C++, в котором используется функция min: min⁡(a,b,c)^(a%c); Не могу понять как нужно расписать данный код,...

6
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
06.11.2014, 12:06
bleef159, В той строчке создается массив объектов Shape.
1
 Аватар для reisal78
944 / 687 / 230
Регистрация: 28.04.2013
Сообщений: 1,925
06.11.2014, 12:15
Лучший ответ Сообщение было отмечено Блеф как решение

Решение

bleef159, класс это и есть пользовательский тип данных.
Объект класса это по сути "улучшенная" переменная, которая позволяет выполнять какие то действия (вызов методов) на хранящейся в ней информацией.

Добавлено через 2 минуты
Java
1
String[] s = new String[]{new String("hello"), new String("world"), new String("and"), new String("all")};
Тоже самое посути =)
1
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
07.11.2014, 10:32
Цитата Сообщение от reisal78 Посмотреть сообщение
Тоже самое посути =)
Главное - не создавать String'и при помощи new в продакшене.
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
07.11.2014, 13:37
Цитата Сообщение от silent_1991 Посмотреть сообщение
Главное - не создавать String'и при помощи new в продакшене.
почему?
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
07.11.2014, 15:15
KEKCoGEN, потому что в Java есть такая штука как строковый пул. Туда помещаются все строковые литералы, использованные в программе. Обратите внимание: строковые *литералы*. Соответственно, если мы где-то в программе уже использовали литерал "hello", а потом в другом месте снова используем его же, новый объект типа String создан не будет, а будет использован уже существующий, лежащий в пуле. Однако создание строки при помощи new не вызывает помещение её в пул. Но! Строку-то мы создаём с использованием конструктора, который принимает другую строку (в данном случае). Соответственно, следующая конструкция:
Java
1
String uniqueString = new String("unique string");
при условии, что нигде ранее в программе не использовался литерал "unique string", вызовет создание двух объектов: одно создание инициирует сам литерал "unique string", который будет помещён в пул, а другое - оператор new, который мы вызвали собственноручно. Таким образом, если мы в цикле 10 раз вызовем
Java
1
String str = new String("hello");
то получим в памяти 10 (одинаковых) объектов, а если сделаем
Java
1
String str = "hello";
то только один, взятый из пула.
Однако, строку можно "насильно" запихнуть в пул, вызвав метод intern(). В этом случае строка либо положится в пул, если её ещё там нет, и метод вернёт ссылку на этот новый элемент пула, либо, если строка уже находится в пуле, метод просто вернёт ссылку на неё. Вот иллюстрирующий это поведение код.
5
 Аватар для MrKvant
7 / 7 / 4
Регистрация: 15.12.2014
Сообщений: 17
16.12.2014, 04:19
Цитата Сообщение от bleef159 Посмотреть сообщение
Shape[] a = new Shape[]{new Shape(), new Triangle(), new Square(), new Сircle()};
Это один из способов инициализации. Понятней можно было бы переписать так:
Java
1
2
3
4
5
6
Shape[] a; //декларация массива
a = new Shape[4]; // выделение памяти под 4 элемента
a[0] = new Shape();
a[1] = new Triangle();
a[2] = new Square();
a[3] = new Circle();
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.12.2014, 04:19
Помогаю со студенческими работами здесь

Как понять данный кусок кода
Имеется некий абстрактный класс. от него имеется производный класс Задание работа с данными(чтение из файла, запись в файл) средствами Си...

Как запустить данный код
Как запустить данный код на Microsoft Visual C++ 2010 express ? Только можно прямо по пунктам, просто не разбираюсь совсем в С++. ...

Как данный код от конвертировать с С++ на C#
#include &quot;stdafx.h&quot; #include &lt;algorithm&gt; // std::random_shuffle #include &lt;time.h&gt; // time #include &lt;iostream&gt; #include...

Как реализовать данный код?
private void StartToolStripMenuItem_Click(object sender, EventArgs e) { ThreadPool.QueueUserWorkItem(new...

Как переписать данный код с C++ на C#?
Есть код: class Number { public: Number(); Number(int); Number(Number*); virtual void factorial(); int getNum();


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru