abstract class A {}

class AB extends A {}
class AC extends A {}

で、
class C {
void method(AB typeAB) {
// ...
}

void method(AC typeAC) {
// ...
}
}
のとき、

C c = new C();
A[] arrayA = {new AB(),
new AC()}; // 配列使ってるのはあんまり気にしないで。
ってしたとして、
for(int i=0;i<arrayA.length;i++) {
c.method(arrayA[i]);
}

ってしたかったんだけど、これってarrayA(型はA)の実際のインスタンスの型(AB or AC)は見てくれないよねぇ?
と言うことで、たぶんコンパイル時点ではじかれる気がするんだけど、こういうことをエレガントにやりたい場合ってどうするの?

Cに、
void method(A typeA) {
if(typeA instanceof AB) {
method((AB)typeA);
} else if(typeA instanceof AC) {
method((AC)typeA);
}
}
を追加なんてやんないよね?
誰か教えて〜。

あ、あと蛇足なんだけど、配列のlengthってフィールドはどこに記述されてんのかな。とか疑問に思ってみたり。