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

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?


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


[info]phantom
2010-06-03 11:09 (ссылка)
Не имею особого отношения к джаве, но думаю, компилятор не должен допускать перегрузку приватного метода.

(Ответить)


[info]joppux
2010-06-03 12:00 (ссылка)
P.A.f, что логично, т.к. Q.B.f - это просто другой метод (как уже сказали, с private же такая же ситуация не удивляет?)

(Ответить) (Ветвь дискуссии)


[info]qwerty
2010-06-03 17:42 (ссылка)
Вы наполовину правы. Попробуйте продолжить ваше рассуждение.

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


(Анонимно)
2010-06-03 12:48 (ссылка)
Не имею никакого отношения к жабе, но если P.A.f() - приватная для пакета P, то Q.B.f() - это новая функция, не не перегружающая P.A.f(), которая не видна в Q.B. Так? Ну и всё, здесь бы я на месте компилятора заматерился и потребовал бы переименовать Q.B.f() во что-нибудь другое, потому что быдлокод.

А что, этот метод package private по умолчанию? Ну, поздравляю, классный синтаксис, чо.

(Ответить) (Ветвь дискуссии)


(Анонимно)
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 переписывает содержимое обоих входов одним значением, причем и у каждого из его подклассов значения, лежащие по этим двум индексам, всегда совпадают.

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