サブクラスからオーバーライドされたバージョンではなく、常に「ローカルに定義された」バージョンを実行するような方法で、Java でオーバーライド可能なメソッドを呼び出すことは可能ですか? superつまり、スーパークラスではなく、このクラスを参照するアナログはありますか?
私がやろうとしていることを明確にするために、コード例を挙げましょう。
class A {
void foo() {
System.out.println("Foo from A");
}
void bar() {
foo(); // <-- This is the important line!
}
}
class B extends A {
@Override
void foo() {
System.out.println("Foo from B");
}
}
を実行new B().bar()すると、でbar()定義されたメソッドが呼び出され、オーバーライドされAて呼び出されて「Foo from B」が出力されます。foo()B
ではなくで定義されているメソッドをメソッドに強制bar()的に呼び出す方法はありますか? で定義されているメソッドを呼び出すために inを使用できるのと同じように? 残念ながら、使用してもサブクラスのバージョンが呼び出されます。またはのようなものでも機能しません。foo()ABsuper.foo()Bfoo()Athis.foo()((A) this).foo()A.this.foo()
foo()明らかに、 inのプライベート バージョンまたは最終バージョンを定義してA、代わりにそれを呼び出すことができます。しかし、解決策を望んでいます。上記のコード サンプルの「重要な行」を、foo() を呼び出す別の方法に変更して、できればリフレクションのようなトリックを使用せずに、「Foo from A」を出力させるだけです。