Может ли родительский метод использовать метод Child Class?
Ссылка здесь
A - это прекомпилированный Java-класс (у меня также есть исходный файл)
B - класс Java, который я создаю
B расширяет A.
Как логика может быть реализована так, что A может вызывать методы, которые имеют B.
Ниже приведены условия:
- Я не хочу прикасаться к A (только как
последний вариант, хотя это означает, что нет
другое решение существует).
- Я не хочу использовать отражение.
Как указано, при необходимости я мог бы изменить A.
Каким может быть возможное решение в любом случае?
Ответы
Ответ 1
Класс A
должен определять методы, которые он будет вызывать (возможно, как абстрактные, а A должен быть абстрактным классом, для Paul Haahr отлично guide); B
может (на самом деле, быть конкретным ДОЛЖНЫ, если метод абстрактный) переопределить эти методы. Теперь вызовы этих методов из других методов в A
, когда они происходят в экземпляре класса B, переходят к B-переопределениям.
Общая схема проектирования называется Template Method; методы, подлежащие переопределению, часто называются "методы крюка" и метод, выполняющий вызовы, "метод организации".
Ответ 2
Да, кажется, что если вы переопределите функции супер/базовые классы, вызовы этих функций в базовом классе перейдут к дочернему/производному классу. По-моему, это плохой дизайн, но там вы идете.
class Base
{
public void foo()
{
doStuff();
}
public void doStuff()
{
print("base");
}
}
class Derived extends Base
{
@Override
public void doStuff()
{
print("derived");
}
}
new Derived().foo(); // Prints "derived".
Очевидно, что все методы Derived
должны быть уже определены в Base
, но делать это иначе (без интроспекции) было бы логически невозможно.
Ответ 3
Я бы довольно не решался это сделать. Пожалуйста, поправьте меня, если я ошибаюсь, а затем я удалю, но похоже, что вы хотите сохранить объект A вместе с B-объектом. Если они действительно не являются одним и тем же объектом, "связывание" (что научный термин) вам нужно будет сделать, это будет довольно уродливо.