我不知道这是否适用于您的具体情况,但我发现大多数时候,一个抽象类及其实现可以分为两个普通类。
例如:
abstract class AbstractAdder {
int AddThree(int a) {
Add(a, 3);
}
abstract int Add(int a, int b);
}
class NormalAdder inherits AbstractAdder {
int Add(int a, int b) {
return a + b;
}
}
var result = new NormalAdder().AddThree(6);
可以改成:
class ThreeAdder {
ThreeAdder(IGenericAdder genericAdder) {
this.genericAdder = genericAdder;
}
int AddThree(int a) {
return this.genericAdder.Add(a, 3);
}
}
class NormalAdder implements IGenericAdder {
int Add(int a, int b) {
return a + b;
}
}
var result = new ThreeAdder(new NormalAdder()).AddThree(6);
这有几个优点:
- 这些类的耦合度较低,因为它们不会相互继承。因为类是独立的,所以职责更加独立和明确。
- 您可以使用多个类的功能,而您只能从一个抽象类继承。(编辑:显然不是在 PHP 中,因为你有多重继承)
- 在哪个类上调用该方法更清楚(恕我直言)。
似乎您正在使用继承来耦合多个类,但这不是继承的意思。