Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет qwerty ([info]qwerty)
@ 2010-06-02 23:31:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Филологическое

Вот, предположим, есть Жабья программа:
public class P.A {
  int f() { return 1; } // package private
}

public class Q.B extends P.A {
  public int f() { return 2; }
}

public class P.C extends Q.B {
  public int f() { return 3; }
}

Какой метод будет перекрыт определением P.C.f?


(Читать комментарии) - (Добавить комментарий)


(Анонимно)
2010-06-03 12:55 (ссылка)
Так какой же метод он перекрывает? Не томи. Это всё дикий произвол, конечно, но интересно.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]qwerty
2010-06-03 17:40 (ссылка)
Оба!

(Ответить) (Уровень выше) (Ветвь дискуссии)


(Анонимно)
2010-06-03 23:18 (ссылка)
Гибко!

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]qwerty
2010-06-05 11:40 (ссылка)
Нет, в этом слове 4 буквы, первая Ж. Гибко было бы, если бы можно было отдельно перекрыть (override) P.A.f и Q.B.f.

С точки зрения таблиц виртуальных методов это устроено так: класс A определяет вход в таблицу, класс B не изменяет его содержимое, а добавляет свой, а класс C переписывает содержимое обоих входов одним значением, причем и у каждого из его подклассов значения, лежащие по этим двум индексам, всегда совпадают.

(Ответить) (Уровень выше)


(Читать комментарии) -