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

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

06.11.2014, 11:40. Показов 1426. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru