### Question:
AbstractRange implements Range<C, R> { @Override public boolean overlaps(R other) { return other != null && (other.contains(start) || other.contains(end) || this.contains(other)); } protected  AbstractRange(C start, C end); @Override C start(); @Override C end(); @Override boolean contains(R other); @Override boolean contains(C value); @Override boolean overlaps(R other); @Override boolean isConsecutive(R other); @Override boolean isEmpty(); @Override R merge(R other); @Override R intersection(R other); @SuppressWarnings({"unchecked"}) @Override List<R> exclude(R other); @Override boolean isSameRange(R other); @Override String toString(); @Override Iterator<C> iterator(); @Override final boolean equals(Object o); @Override final int hashCode();  }### Answer:
@Test public void testOverlaps() { R range = getTestRange(from("10"), to("20")); assertNotOverlapping(range, getTestRange(from("2"), to("9"))); assertOverlapping(range, getTestRange(from("5"), to("10"))); assertOverlapping(range, getTestRange(from("10"), to("10"))); assertOverlapping(range, getTestRange(from("5"), to("15"))); assertOverlapping(range, getTestRange(from("10"), to("15"))); assertOverlapping(range, getTestRange(from("13"), to("15"))); assertOverlapping(range, getTestRange(from("15"), to("20"))); assertOverlapping(range, getTestRange(from("15"), to("25"))); assertOverlapping(range, getTestRange(from("20"), to("20"))); assertOverlapping(range, getTestRange(from("20"), to("25"))); assertNotOverlapping(range, getTestRange(from("21"), to("25"))); assertOverlapping(range, getTestRange(from("5"), to("20"))); assertOverlapping(range, getTestRange(from("10"), to("20"))); assertOverlapping(range, getTestRange(from("10"), to("25"))); assertOverlapping(range, getTestRange(from("5"), to("25"))); assertFalse(range.overlaps((R) null)); }