Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
 Аватар для animator404
99 / 99 / 12
Регистрация: 05.05.2013
Сообщений: 1,208

Офигеть!

24.06.2013, 02:52. Показов 2604. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Каким будет результат компиляции и выполнения данного кода?
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
public class Greek{
 
     int i=1;
 
     public int getI(){
          System.out.print("Super");
          return i;
     }
 
     public static void main(String arhs[]){
          Greek ga=new Arabik();
          System.out.print(ga.i+" "+ga.getI());
     }
}
 
 
class Arabik extends Greek{
 
     int i=2;
 
     public int getI(){
          System.out.print("Sub");
          return i;
     }
 
}
Только не гуглите и не копипасте пожалуйста. Так будет не интересно. Сам долго въезжал, но все таки понял....
0
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
25.06.2013, 01:27
Студворк — интернет-сервис помощи студентам
прикольно то что в моём посте выше был такой же разжёванный ответ, надо было просто внимательно читать )))
1
3 / 3 / 2
Регистрация: 04.01.2013
Сообщений: 73
06.07.2013, 01:12
Цитата Сообщение от lowercase Посмотреть сообщение
при обращении к методам учитывается фактический класс обьекта(т.е. работает полиморфизм). при обращнии к полям учитывается тип ссылки.
А почему тогда
такая запись

Java
1
2
3
4
    public static void main(String arhs[]){
        Greek ga = (Greek) new Arabik();
        System.out.print(ga.i+" "+ga.getI());
    }

ничего не меняет? Почему не получается "Super1 1" ?
0
 Аватар для animator404
99 / 99 / 12
Регистрация: 05.05.2013
Сообщений: 1,208
06.07.2013, 02:47  [ТС]
St@nton, как мне кажется (поправьте если что), эта строчка кода:
Java
1
Greek ga = (Greek) new Arabik();
эквивалентна двум:
Java
1
Greek ga = new Arabik();
То есть этим = (Greek) new Arabik(); вы никак не навредили использовать объекту ga структуру класса Greek, а реализацию класса Arabik.

Добавлено через 7 минут
И еще, как мне кажется, при таком (Greek) new Arabik(); преобразовании ничего особо не происходит, потому что у класса Arabik есть метод getI() как и у Greek, пусть и переопределенный.
0
38 / 38 / 11
Регистрация: 21.05.2013
Сообщений: 128
06.07.2013, 11:56
Цитата Сообщение от St@nton Посмотреть сообщение
А почему тогда
такая запись

Java
1
2
3
4
    public static void main(String arhs[]){
        Greek ga = (Greek) new Arabik();
        System.out.print(ga.i+" "+ga.getI());
    }

ничего не меняет? Почему не получается "Super1 1" ?
Greek ga = (Greek) new Arabik();
ga - переменная типа Greek ссылающаяся на адрес в памяти
new Arabik() - создание нового объекта типа Arabik
Тип объекта после создания не меняется, приведением типов((Greek) new Arabik()) в том числе. В итоге в с равнении с изначальным кодом, ничего не изменилось: переменная ga по прежнему типа Greek, объект на который она ссылается типа Arabik. Зачем тогда вообще разрешено приведение объектных типов - чтобы скрывать/давать доступ к полям и методам классов:
System.out.println(ga.i); //1
System.out.println(((Arabik)ga).i); //2

Добавлено через 7 минут
System.out.println(ga.i); //1, так как вызывается i класса Greek
System.out.println(((Arabik)ga).i); //2, так как вызывается i класса Arabik
Для класса Arabik - обе i храняться в памяти, а доступ к той или другой зависит от типа переменной через которую идет обращение
1
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
06.07.2013, 12:03
Цитата Сообщение от MaxNevermind Посмотреть сообщение
Зачем тогда вообще разрешено приведение объектных типов - чтобы скрывать/давать доступ к полям и методам классов:
это сделано для того чтобы при наследовании пользоваться всеми реализациями через единый интерфейс не заботясь о реализации.
Именно поэтому в бинах есть такое понятие как гетер и сетер, если у вас есть своя переменная i и вы хотите чтобы каст не приводил к тому что вы описали, вы пользуетесь не полями напрямик а через гетер, в котором

Java
1
2
3
int getI() {
 return this.i;
}
1
3 / 3 / 2
Регистрация: 04.01.2013
Сообщений: 73
11.07.2013, 20:43
Цитата Сообщение от MaxNevermind Посмотреть сообщение
Тип объекта после создания не меняется, приведением типов в том числе
Цитата Сообщение от mutagen Посмотреть сообщение
если у вас есть своя переменная i и вы хотите чтобы каст не приводил к тому что вы описали..
Хе) Супер!) Спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Ответ Создать тему
Новые блоги и статьи
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru