Я думаю, вы смотрите на это с неправильной стороны. В вашем первом фрагменте кода у вас есть три метода:
SequentialIterator.next()
RandomAccessIterator.next() // same as SequentialIterator.next()
RandomAccessIterator.shift(int)
Во втором у вас есть три метода, но они не одинаковые:
RandomAccessIterator.shift(int)
SequentialIterator.shift(int) // same as RandomAccessIterator.shift(int)
SequentialIterator.next()
При таком взгляде, я думаю, должно быть ясно, что только первая версия имеет смысл: класс RandomAccessIterator
может разумно предложить метод next()
, но класс SequentialIterator
не может разумно предложить shift(int)
способ.
(Это, конечно, предполагает, что есть какая-то причина, чтобы один из них наследовал от другого для начала.)