Java继承自包含的类

时间:2018-01-12 08:06:51

标签: java inheritance

我的代码中有以下类关系:

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

2 个答案:

答案 0 :(得分:1)

与Stultuske在评论中提到的一样,创建一个使用自己定义的接口的类是没有意义的。反过来也是有道理的。

在成功编译A之前,类A.IA无法成功编译。另一方面,A.IA只能在编译其封闭类时进行编译。

您可以为接口IA做的下一个最接近的事情是将其移至同一个包,并使其成为包私有。

另一种方法是将所有内容再次包装到另一个类中,并将界面IA移出一层。

答案 1 :(得分:1)

我认为你的类层次结构存在误解:如果外部不可见,那么在外部公开A类实现接口是没有意义的。我认为没有任何实际用途。