abstract class A { abstract S bar(); void foo(A a){ Runnable[] x = a.bar(); } } abstract class AB { abstract S bar(); void foo(AB a){ Runnable x = a.bar(); } } abstract class AC { abstract S bar(); void foo(AC a){ Runnable[] x = a.bar(); } }