当前我有一个基类,其中包含项目的init和teardown方法,以及一些大量的常用方法,并且这些方法被其子类继承/使用。
由于基础类变得越来越大,所以我尝试将这些常用方法移至新创建的类中,以提高项目的模块化程度。原始基类继承了那些新创建的类的方法。 (多重继承?)
有重构这个的建议吗?还需要尽量减少对子类的影响..最少的代码更改将是完美的..
Base class
-method1()
-method2()
-method3()
-method4()
-method5()
-method6()--------
| |
| |
subclasse1 subclass2
最佳答案
首先,java中没有类的多重继承(只有接口(interface)的多重继承)。
但是,在 java 8 中,您可以编写接口(interface)方法的默认实现(请参阅 "Default Methods" on docs.oracle.com )。但有一些限制:
- 您仍然无法在界面中声明字段
- 如果同一方法在不同接口(interface)中有 2 个默认实现,您仍然需要重写它们。
您最好使用 adapter pattern ,即将您的代码折射为如下所示:
public class BaseClass {
private final Adaptee1 adaptee1;
private final Adaptee2 adaptee2;
// ...
public BaseClass(Adaptee1 adaptee1, Adaptee2 adaptee2 /* , ...*/) {
this.adaptee1 = adaptee1;
this.adaptee2 = adaptee2;
//...
}
public BaseClass() {
this(new ConcreteAdaptee1(), new ConcreteAdaptee2() /* , ...*/)
}
public void method1() {
adaptee1.method1();
}
public void method2() {
adaptee1.method2();
}
public void method3() {
adaptee2.method3();
}
public void method4() {
adaptee2.method4();
}
// ...
}
public interface Adaptee1 {
void method1();
void method2();
}
public interface Adaptee2 {
void method3();
void method4();
// ...
}
//...
public class ConcreteAdaptee1 implements Adaptee1 {
//...
}
public class ConcreteAdaptee2 implements Adaptee2 {
//...
}
//...
例如,如果您还需要访问其他适配器中的方法,您甚至可以在方法调用中将适配器传递给适配器。
<小时/>但是您应该首先检查是否可以以良好的方式将类拆分为多个类(即适应者应该是独立的)。不要不惜一切代价将类(class)分成几个部分。如果您无法使适应者独立,则应将其保留为单个类,并依靠 IDE 来更轻松地导航代码(代码折叠、书签等)
关于java - 如何继承/使用多个类的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25339852/