我的代码中有以下类关系:
public class A implements A.IA
{
private IA value;
private static class B implements IA
private static class C implements IA
private interface IA //implicitly static
}
我的IDE告诉我这是一种涉及A
的循环继承形式。我不认为继承本身是循环的,但它们确实具有某种循环关系。
有人可以解释为什么这是一个问题吗?我理解继承非静态成员是不可能的,因为非静态方法与其包含类的实例相关联,但静态成员没有这样的要求。这种关系使得继承不可能是什么?
我已经在下面对此问题进行了部分解决,但由于IA
不再允许私有,因此不能令人满意。虽然我主要在解释上述问题之后,但我们将不胜感激。
public class A implements IA
{
private IA value;
private static class B implements IA
private static class C implements IA
}
interface IA
答案 0 :(得分:1)
与Stultuske在评论中提到的一样,创建一个使用自己定义的接口的类是没有意义的。反过来也是有道理的。
在成功编译A
之前,类A.IA
无法成功编译。另一方面,A.IA
只能在编译其封闭类时进行编译。
您可以为接口IA
做的下一个最接近的事情是将其移至同一个包,并使其成为包私有。
另一种方法是将所有内容再次包装到另一个类中,并将界面IA
移出一层。
答案 1 :(得分:1)
我认为你的类层次结构存在误解:如果外部不可见,那么在外部公开A类实现接口是没有意义的。我认为没有任何实际用途。