Javaでのメソッド呼び出しに関しては、今日仕事中に興味深いコーナーがありました。次のことを想像して:特殊なメソッドへの呼び出しを強制します
class Bar {}
class ExtendedBar extends Bar {}
class Foo {
void doFoo(Bar bar) {}
}
class ExtendedFoo extends Foo {
void doFoo(ExtendedBar exBar) {}
}
今、あなたはExtendedBar
のインスタンスを持っていて、ExtendedFoo
のインスタンスにdoFoo()
を呼びたいです。私たちのテストでは、ランタイムはFoo
のdoFoo(Bar)
の実装ではなく、doFoo(ExtendedBar)
からExtendedFoo
までを実装しました。
もちろん、の名前を別の名前に変更するだけで済みましたが、名前を変更せずにメソッドの名前をそのまま維持することができれば、私たちを驚かせましたここでは強力な従来の文脈で使用されています。
ヒント: 'doFoo(ExtendedBar)' * does not *** ***は 'doFoo(Bar)'をオーバーライドします。 * name *は実際には問題ではなく、メソッドには異なるシグネチャがあります。 –
"あなたがExtendedBarのインスタンスを持っていて、ExtendedFoo_のインスタンスでdoFoo()を呼びたい場合"は 'doFoo(ExtendedBar)'を選択する必要があります。これを見てください:http://ideone.com/sJCZ3W – Hackerdarshi
@Hackerdarshiええ、あなたは正しいですが、私は別の問題があったと思います(ここでは、Android ARTではネイティブJVMではなく)。 –