Worked example
class Rect extends Shape implements Printable { ... } // a shape, and printable
class Tag implements Printable, Sized { ... } // not a shape, still printable
Printable[] items = { new Rect(2, 3), new Tag("hi") };
for (int i = 0; i < items.length; i++) {
System.out.println(items[i].label());
}
// [Rect]
// <hi>
Rect and Tag share no superclass — only the Printable contract — yet one loop handles both.