### Question:
DefaultOverlayManager extends AbstractList<Overlay> implements OverlayManager { @Override public Iterable<Overlay> overlaysReversed() { return new Iterable<Overlay>() { private ListIterator<Overlay> bulletProofReverseListIterator() { while (true) { try { return mOverlayList.listIterator(mOverlayList.size()); } catch (final IndexOutOfBoundsException e) { } } } @Override public Iterator<Overlay> iterator() { final ListIterator<Overlay> i = bulletProofReverseListIterator(); return new Iterator<Overlay>() { @Override public boolean hasNext() { return i.hasPrevious(); } @Override public Overlay next() { return i.previous(); } @Override public void remove() { i.remove(); } }; } }; } DefaultOverlayManager(final TilesOverlay tilesOverlay); @Override Overlay get(final int pIndex); @Override int size(); @Override void add(final int pIndex, final Overlay pElement); @Override Overlay remove(final int pIndex); @Override Overlay set(final int pIndex, final Overlay pElement); @Override TilesOverlay getTilesOverlay(); @Override void setTilesOverlay(final TilesOverlay tilesOverlay); @Override Iterable<Overlay> overlaysReversed(); @Override List<Overlay> overlays(); @Override void onDraw(final Canvas c, final MapView pMapView); @Override void onDraw(final Canvas c, final Projection pProjection); @Override void onDetach(final MapView pMapView); @Override void onPause(); @Override void onResume(); @Override boolean onKeyDown(final int keyCode, final KeyEvent event, final MapView pMapView); @Override boolean onKeyUp(final int keyCode, final KeyEvent event, final MapView pMapView); @Override boolean onTouchEvent(final MotionEvent event, final MapView pMapView); @Override boolean onTrackballEvent(final MotionEvent event, final MapView pMapView); @Override boolean onSnapToItem(final int x, final int y, final Point snapPoint, final IMapView pMapView); @Override boolean onDoubleTap(final MotionEvent e, final MapView pMapView); @Override boolean onDoubleTapEvent(final MotionEvent e, final MapView pMapView); @Override boolean onSingleTapConfirmed(final MotionEvent e, final MapView pMapView); @Override boolean onDown(final MotionEvent pEvent, final MapView pMapView); @Override boolean onFling(final MotionEvent pEvent1, final MotionEvent pEvent2,
                           final float pVelocityX, final float pVelocityY, final MapView pMapView); @Override boolean onLongPress(final MotionEvent pEvent, final MapView pMapView); @Override boolean onScroll(final MotionEvent pEvent1, final MotionEvent pEvent2,
                            final float pDistanceX, final float pDistanceY, final MapView pMapView); @Override void onShowPress(final MotionEvent pEvent, final MapView pMapView); @Override boolean onSingleTapUp(final MotionEvent pEvent, final MapView pMapView); @Override void setOptionsMenusEnabled(final boolean pEnabled); @Override boolean onCreateOptionsMenu(final Menu pMenu, final int menuIdOffset, final MapView mapView); @Override boolean onPrepareOptionsMenu(final Menu pMenu, final int menuIdOffset, final MapView mapView); @Override boolean onOptionsItemSelected(final MenuItem item, final int menuIdOffset, final MapView mapView);  }### Answer:
@Test public void testOverlaysReversed() { final ListTest<Overlay> list = new ListTest<Overlay>() { private final DefaultOverlayManager defaultOverlayManager = new DefaultOverlayManager(null); @Override public void add() { defaultOverlayManager.add(new Overlay() {}); } @Override public void remove() { defaultOverlayManager.remove(0); } @Override public Iterable<Overlay> reverseOrder() { return defaultOverlayManager.overlaysReversed(); } @Override protected ListIterator<Overlay> unprotectedReverseListIterator() { throw new IllegalArgumentException(); } @Override public ListIterator<Overlay> reverseIterator() { throw new IllegalArgumentException(); } }; final ListTester<Overlay> tester = new ListTester<>(); tester.test(list); }