超类具有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,谢谢,同时我添加了一些说明。