次のように、オブジェクトの実際のタイプを使用して、使用するメソッドを定義できることを学びました。
[...]
Object foo = new String("hello");
[...]
bla(foo);
void bla(String x){
}
void bla(Integer x){
}
これでメソッドを使用する必要がありますbla(String x)
が、代わりにコンパイラエラーが発生します。私は理由を知っています:タイプfoo
が現在であるためObject
。現在正しく行っているかどうかはわかりませんが、Javaは実際のタイプ(または特定のタイプ)でメソッドを選択するので、ダウンキャストすると代わりにObject
選択されます。メソッドが指定されています。String
Object
または、メソッドでタイプを判別する唯一if(foo instanceof xxx)
の方法ですvoid bla(Object x)?
PS:これについて誤解しないでください:メソッドをオーバーロードできるという意味ではありません。つまり、(定義されたタイプではなく)実際のタイプに基づいてメソッドを選択したいということです。