私は以下のようなコードを持っています:
Class A{
protected void method1(){
//i have logic which will fetch the results from the database
}
}
そして、クラスAを拡張するもう1つのクラスがあります:
Class B extends A{
//some logic
}
実行されたデータベース呼び出しの数は? 一つか二つ?
私は以下のようなコードを持っています:
Class A{
protected void method1(){
//i have logic which will fetch the results from the database
}
}
そして、クラスAを拡張するもう1つのクラスがあります:
Class B extends A{
//some logic
}
実行されたデータベース呼び出しの数は? 一つか二つ?
もしあなたがそうするなら:
new B().method1()
method1()
オブジェクトに代わって 1 回だけ呼び出されB
ます。B.method1()
JVM が行っていることは、最初に見つけようとすることです。でオーバーライドされた場合はB
、それが呼び出されます (完全にスキップされますA.method1()
)。しかし、B
それをオーバーライドしていないため、オリジナルA.method1()
は透過的に呼び出されます。
B
オリジナルを呼び出すmethod1()
唯一の方法は、内部でA.method1()
呼び出すことです。super.method1()
B
B
いずれにしても、オーバーライドされたメソッドでロジックを記述した場合methodm1
、クラスに関係なくone
呼び出しのみがデータベースに移動し、とにかくメソッドを 2 回呼び出します。