如何在Java的抽象类中强制实现嵌套的抽象类?

如何在Java的抽象类中强制实现嵌套的抽象类?,java,class,nested,abstract,Java,Class,Nested,Abstract,我不熟悉Java,但习惯于OOP编程。有没有一种方法可以强制实现一个嵌套到另一个抽象类中的抽象类,如下面的代码所示: public abstract class A { public abstract class B extends C { @Override public abstract void foo(); } } 我想在A的每个子类中实现B。有可能吗 谢谢您的帮助,是的,使B成为界面,如所示。是的,使B成为界面,如所示。这

我不熟悉Java,但习惯于OOP编程。有没有一种方法可以强制实现一个嵌套到另一个抽象类中的抽象类,如下面的代码所示:

public abstract class A
{

    public abstract class B extends C
    {
        @Override
        public abstract void foo();

    }

}
我想在A的每个子类中实现B。有可能吗


谢谢您的帮助,

是的,使B成为界面,如所示。

是的,使B成为界面,如所示。

这是不可能的。类应该只通过抽象或实现的方法提供实例的行为。它不应该说明如何实现


由于您无法调用已实现的类B,因此需要将其命名为其他名称,这意味着它的存在可以被忽略,因此也不清楚这将如何发挥作用。

这是不可能的。类应该只通过抽象或实现的方法提供实例的行为。它不应该说明如何实现


因为你不能调用实现的类B,所以它需要被命名为其他名称,这意味着它的存在可以被忽略。如果我读对了你的问题,你希望A的每个子类都包含B的子类,那么没有直接的方法。但是,您可以执行以下操作:

public abstract class A
{

  public abstract class B extends C
  {
      @Override
      public abstract void foo();
   }

   protected abstract B getBInstance();
}
因为这迫使A的子类返回B的实例,所以它们必须能够访问B的某个子类


但是,你应该问自己,为什么A应该关心实现B的子类,除非A以某种方式使用B,而这需要上述内容。

如果我正确阅读了你的问题,你希望A的每个子类都包含B的子类,那么没有直接的方法来实现这一点。但是,您可以执行以下操作:

public abstract class A
{

  public abstract class B extends C
  {
      @Override
      public abstract void foo();
   }

   protected abstract B getBInstance();
}
因为这迫使A的子类返回B的实例,所以它们必须能够访问B的某个子类


但是,你应该问自己,为什么A应该关心实现B的子类,除非A以某种方式使用B,而这需要上述内容。

我认为这并不能回答问题。无论B是抽象类、接口还是其他什么,都可以很好地将A扩展到具体的类。这一点很好,但我理解的问题是,当从A派生时,如何以编译器可以强制执行的方式推迟foo的实现。否则,这似乎是不可能的。当然,我欢迎一个反例。我相信我的回答提供了一种可能性。我并不是说这是一个好的设计,但它会强制A的每个子类都可以访问B的子类。我认为这并不能回答这个问题。无论B是抽象类、接口还是其他什么,都可以很好地将A扩展到具体的类。这一点很好,但我理解的问题是,当从A派生时,如何以编译器可以强制执行的方式推迟foo的实现。否则,这似乎是不可能的。当然,我欢迎一个反例。我相信我的回答提供了一种可能性。我不是说这是一个好的设计,但它会强制A的每个子类都可以访问B的子类。你想强制A的每个子类都包含一个实现B的嵌套类吗?用纯Java的方法是不可能的。你是说你希望A的每个子类也是B的子类还是包含B的子类?仅供参考,我相信真正的解决方案是有一个扩展C。如果A的子类选择通过另一个子类实现C,这是子类的选择。您想强制A的每个子类都包含一个实现B的嵌套类吗?用纯Java的方法是不可能的。你是说你希望A的每个子类也是B的子类还是包含B的子类?仅供参考,我相信真正的解决方案是有一个扩展C。如果A的子类选择通过另一个子类实现C,那就是子类的选择。