Java 在扩展outerclass时强制客户端提供innerclass的实现

Java 在扩展outerclass时强制客户端提供innerclass的实现,java,iterator,abstract-class,inner-classes,iterable,Java,Iterator,Abstract Class,Inner Classes,Iterable,我想知道,当客户机定义outerclass的新实现时,是否可以强制客户机提供innerclass的实现 为了更好地解释这种情况:我有一个抽象类 public abstract class ImmutablePolynomial implements Iterable { protected int degree; static ImmutablePolynomial sum(ImmutablePolynomial x, ImmutablePolynomial y) {

我想知道,当客户机定义outerclass的新实现时,是否可以强制客户机提供innerclass的实现

为了更好地解释这种情况:我有一个抽象类

public abstract class ImmutablePolynomial implements Iterable {

    protected int degree;

    static ImmutablePolynomial sum(ImmutablePolynomial x, ImmutablePolynomial y) {
        .... Some Implementation using an iterator over terms and a return statement....
     }

     public abstract TermIterator iterator();

     Here I want an innerclass (TermIterator) extending Iterator that must be implemented 
     if you extend ImmutablePolynomial.
现在,客户机可以提供一个不可变多项式的实现,通过扩展这个类,使用特定的数据结构来减少内存使用。 如何强制客户机也提供内部类实现迭代器的实现,以便ImmutablePolynomy中的静态方法sum也能与客户机提供的实现一起工作

另外,如果这是一个坏主意/反模式/有更好的选择,请告诉我。我这样做是为了改进我的编码

编辑1:删除该字段

受保护的托收条款

,如评论中所述。 编辑2:生成方法

迭代器()


由于
不可变多项式
类是抽象的,因此您永远不会拥有类为
不可变多项式
的对象,并且您不希望
不可变多项式
的子类的实例使用类
不可变多项式.term迭代器
,因此注释中建议使用抽象,什么时候会使用
ImmutablePolymonal.TermIterator
?将其作为内部类实现是毫无意义的

正如@Tassos在评论中建议的那样,将
TermIterator
声明为接口;这可以嵌套在类
immutablepolymonery
中,也可以不嵌套,这取决于您的喜好。还要使
不可变多项式.iterator()抽象化


如果您在
immutablepolynomy
中有任何依赖迭代器的具体方法,请根据接口而不是任何特定的实现来实现它们。当您不仅允许而且要求子类提供自己的实现时,这是唯一明智的方法。

不,没有办法做到这一点。为什么需要它们使用不同的迭代器实现?为什么不将迭代器()方法抽象化?子类必须实现它。另外,将TermIterator作为一个接口,您就可以设置它了。但是,我不喜欢您有
收集条款
字段;为什么不让子类来决定如何做呢?@LouisWasserman迭代器应该按照指数的降序来检查这些项。因此,如果你有4x^2+3x+1,它必须首先给出术语4x^2,然后是3x,然后是1。这是因为这种方法sum@Ph03n1x,默认实现在这种情况下做什么?
TermIterator
的行为如何?(看起来您实际上没有
TermIterator
类,在这种情况下@TassosBassoukos有正确的答案:只需将方法抽象化。)