Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
超类具有dao调用时的java继承行为?_Java_Inheritance - Fatal编程技术网

超类具有dao调用时的java继承行为?

超类具有dao调用时的java继承行为?,java,inheritance,Java,Inheritance,我有一个代码如下: Class A{ protected void method1(){ //i have logic which will fetch the results from the database } } 我还有一个类扩展了类A: Class B extends A{ //some logic } 现在执行了多少个数据库调用?一个或两个?如果您这样做: new B().method1() method1()仅代表B对象调用一次。JVM所做的是首先

我有一个代码如下:

Class A{

protected void method1(){

//i have  logic which will fetch the results from the database
}

}
我还有一个类扩展了类A:

Class B extends A{

    //some logic

    }
现在执行了多少个数据库调用?一个或两个?

如果您这样做:

new B().method1()
method1()
仅代表
B
对象调用一次。JVM所做的是首先尝试查找
B.method1()
。如果它在
B
中被重写,它将调用它(并完全跳过
A.method1()
)。但由于
B
并没有覆盖它,所以对原始
A.method1()
的调用是透明的

如果
B
将覆盖
method1()
调用原始
A.method1()
的唯一方法是调用
super.method1()
内部
B

如果执行以下操作:

new B().method1()
method1()
仅代表
B
对象调用一次。JVM所做的是首先尝试查找
B.method1()
。如果它在
B
中被重写,它将调用它(并完全跳过
A.method1()
)。但由于
B
并没有覆盖它,所以对原始
A.method1()
的调用是透明的


如果
B
将覆盖
method1()
调用原始
A.method1()
的唯一方法是调用
super.method1()
B
如果您在
B
中用重写方法编写了逻辑,那么在任何情况下,当您调用
methodm1
时,无论类是什么,只有
一个
调用将进入数据库,直到您调用方法两次为止。

如果您在
B
中用重写方法编写了逻辑另外,在任何情况下,当您只调用
methodm1
而不考虑类时,
一个
调用将进入数据库,直到您调用方法两次。

如果它被重写,它将只执行
B.method1()
,它将不会继续执行
A.method1()
。当然,除非您从
B.method1()
显式调用
super.method1()
,但这是另一回事。@biziclop:+1,谢谢,我同时添加了一些说明。如果它被重写,它将只执行
B.method1()
,它将不会继续执行
a.method1()
。当然,除非您从
B.method1()
显式调用
super.method1()
,但这是另一回事。@biziclop:+1,谢谢,同时我添加了一些说明。