【发布时间】:2014-03-01 08:28:18
【问题描述】:
我正在使用 Java API,它需要我实现一些相当大的接口。但是通常只有一两个细节在实现之间实际上有所不同,因此我制作了一些抽象基类来提供大部分实现。
但是现在我遇到了需要从其他类扩展和/或实现多个此类接口的情况,因此我无法扩展我的抽象基类。
在 C++ 中,我可以使用多重继承,还可以使用一些其他技巧,如下所示。但是 Java 不允许以这种方式使用多重继承或泛型。
class MyClass : public HelperForInterfaceA, public HelperForInterfaceB {...};
class template<class BASE> MyHelper : public BASE {...};
我现在最好的想法是将我的抽象助手类的具体实现作为一个字段,然后将所有接口方法转发到该字段实例,该字段具有对要实现的主要对象的引用如果需要,最后的详细信息。
class MyClass extends A implements IB, IC {
private static class B extends BAbstractHelper {
private A a;
public B(A a, int size) {
super(size);
this.a = a;
}
@Override
public boolean foo(int x, int y) {
return a.foo(x, y);
}
}
private static class C extends CAbstractHelper {
...
}
private B b;
private C c;
private int range;
@Override
public boolean foo(int x, int y) {
return x*x + y*y <= range*range;
}
@Override
public float bar(float x, int y, String s) {
return b.bar(x,y,s);
}
...
}
但这似乎有点麻烦,需要很多包装器方法。有没有更好的处理方法?
【问题讨论】:
-
非常好的问题。恐怕会很痛:-(
标签: java inheritance interface multiple-inheritance