(со статическим и динамическим я имею в виду различие ли код восприимчива изменить)уборщик способ использования наследования, чтобы отделить «статический» код из «динамического» кода
У меня есть немного странная проблема у меня в настоящее время застрял. Я пишу приложение, которое связано с некоторыми сложными взаимодействиями между компонентами, в которых становится трудно отслеживать поток кода. Чтобы упростить это, я пытаюсь структурировать код, создавая «слои», где каждый уровень имеет увеличенную функциональность по сравнению со слоем над ним. Каждый слой содержится в пакете. У меня следующая проблема:
Рассмотрим следующие 2 классов и их подклассов с расширенной функциональностью:
Класс A:
package layer;
class A {
B b;
A() {
b = new B();
}
void foo() {
b.foo();
}
/* More A-class methods here */
}
Класс B:
package layer;
class B {
void foo() {
// Do something
}
/* More B-class methods here */
}
подклассы :
package sublayer;
class ASub extends A {
ASub() {
super.b = new BSub(); // This needs a cast to compile
}
}
Подкласс B:
package sublayer;
class BSub extends B {
@Override
void foo() {
// Do something with more functionality
}
}
В конце концов, я просто хочу, чтобы создать экземпляр и изменять классы Asub и BSub, будучи в состоянии использовать все методы суперклассов А и В, фактически необходимости изменять код в классах А и сам Б ,
Если я позвоню new ASub().foo()
, я хочу переопределенное Foo() из BSub выполнить вместо того, что Б. Ofcourse я могу добавить переменную BSub bsub
в Asub и переопределить Foo элементов а() метод для вызова bsub.foo()
, но это оленья кожа избежать создание объекта b
в конструкторе A, который кажется неаккуратным кодированием. Любые мысли по этому поводу? Любые комментарии приветствуются.
Я, вероятно, попробую это, если нет другого пути. Он чувствует себя немного как взломать, хотя он не выглядит слишком уродливым, спасибо! – user2443647