Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Странный какой-то полиморфизЬм... / 7 сообщений из 7, страница 1 из 1
08.05.2013, 17:50:40
    #38252179
ozzmosis
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странный какой-то полиморфизЬм...
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
class Root2 {
  String rm = "field of Root2";
  String getField() { return rm; }
}
class Derv2 extends Root2 {
  String rm = "field of Derv2";
  String getField() { return rm; }
}
class InheritanceTest2 {
  public static void main(String[] a) { new InheritanceTest2().doIt(); }
  private void doIt() {
    Root2 x = new Derv2();
    System.out.println("x.rm="+x.rm+", x.getField()="+x.getField() );
  }
}

Output:

Код: plaintext
1.
D:\JAVA\>java InheritanceTest2
x.rm=field of  Root2 , x.getField()=field of Derv2

Да, я знаю конечно же, что нельзя оставлять поля класса доступными для чтения/изменения.
Но с какого перепугу ява лезет за значениями полей в базовый класс (Root2), игнорируя фактический тип объекта (Derv2) ?
...
Рейтинг: 0 / 0
08.05.2013, 17:53:12
    #38252182
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странный какой-то полиморфизЬм...
Здрасте. Поля не обладают полиморфизмом. Только методы и свойства, что в Java одно и тоже.
...
Рейтинг: 0 / 0
08.05.2013, 18:00:02
    #38252189
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странный какой-то полиморфизЬм...
BlazkowiczЗдрасте. Поля не обладают полиморфизмом. Только методы и свойства, что в Java одно и тоже.
Я как всегда налажал с разбега. Тут не такая простая терминология. Полиморфизм можно разделить на статический и динамический.
Динамический полиморфизм реализован черед таблицу виртуальных методов. Что позволяет вызывать метод класса, по экземпляру.
Статический полиморфизм реализуется ещё на этапе компиляции. Компилятор связывает код x.rm с коркретным полем Root.rm.
Это два разных поля - Root.rm и Derv.rm. Компилер понятия не имеет что у вас там может быть Derv. И связывает поле по типу переменной.
...
Рейтинг: 0 / 0
08.05.2013, 18:03:03
    #38252195
ozzmosis
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странный какой-то полиморфизЬм...
Тогда еще вопрос.
Вот добавил я строку:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
class Root2 {
  String rm = "field of Root2";
  String getField() { return rm; }
}
class Derv2 extends Root2 {
  String rm = "field of Derv2";
  String getField() { return rm; }
}
class InheritanceTest2 {
  public static void main(String[] a) { new InheritanceTest2().doIt(); }
  private void doIt() {
    Root2 x = new Derv2();
    System.out.println("x.rm="+x.rm+", x.getField()="+x.getField() );
    System.out.println("((Derv2)x).rm="+((Derv2)x).rm);
  }
}

И получаю на выходе:
Код: plaintext
1.
x.rm=field of Root2, x.getField()=field of Derv2
 ((Derv2)x).rm=field of Derv2 

То, что при выводе ((Derv2)x).rm ява полезла уже в класс Derv2 - это на самом деле был создан "на лету" новый (еще один!) объект класса Derv2 или сработал полиморфизм и ява "поняла", что можно юзать тот же самый объект 'x', который был ранее создан ?
...
Рейтинг: 0 / 0
08.05.2013, 18:07:57
    #38252210
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странный какой-то полиморфизЬм...
ozzmosisТо, что при выводе ((Derv2)x).rm ява полезла уже в класс Derv2 - это на самом деле был создан "на лету" новый (еще один!) объект класса Derv2 или сработал полиморфизм и ява "поняла", что можно юзать тот же самый объект 'x', который был ранее создан ?
Там где не работает полиморфизм, Java использует hiding. Поле Derv.rm как бы скрывает поле Root.rm.
Тут же явно задано что нужно поле из Derv. Компилер это понимает и связывает рантайм с конкретным полем конкретного класса. Опять же во время компиляции. В рантайме тут ничего не происходит.
...
Рейтинг: 0 / 0
08.05.2013, 18:08:32
    #38252212
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странный какой-то полиморфизЬм...
...
Рейтинг: 0 / 0
08.05.2013, 18:15:08
    #38252223
ozzmosis
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странный какой-то полиморфизЬм...
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Странный какой-то полиморфизЬм... / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]