Combine inheritance and array covariance, and the results can potentially get nasty. Together, they allow you to write array stores that will compile, but cause errors at runtime.
== Noncompliant Code Example
[source,text]
----
public class Bowl {
abstract class Fruit { }
class Apple : Fruit { }
class Orange : Fruit { }
Fruit [] fruits;
public void fillBowl(){
fruits = new Apple[30];
fruits[0] = new Orange(); // Noncompliant; this compiles but raises exception at runtime
}