サブクラスからオーバーライドされたバージョンではなく、常に「ローカルに定義された」バージョンを実行するような方法で、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()
A
B
super.foo()
B
foo()
A
this.foo()
((A) this).foo()
A.this.foo()
foo()
明らかに、 inのプライベート バージョンまたは最終バージョンを定義してA
、代わりにそれを呼び出すことができます。しかし、解決策を望んでいます。上記のコード サンプルの「重要な行」を、foo() を呼び出す別の方法に変更して、できればリフレクションのようなトリックを使用せずに、「Foo from A」を出力させるだけです。