use*_*183 2 java inheritance overriding
public class F {
protected int a=0, b=0;
public F() {
a = 2;
b = 2;
}
public void increase() {
upA();
}
public void upA() {
a = a + 1;
}
public String toString() {
return a+" "+b;
}
}
Run Code Online (Sandbox Code Playgroud)
public class G extends F {
public void increase() {
super.increase();
upB();
}
public void upA() {
a = a + a;
}
public void upB() {
b = b + 1;
}
}
Run Code Online (Sandbox Code Playgroud)
以下Java片段在"输出"窗口中打印了什么?
G g = new G();
g.increase();
System.out.println(g);
Run Code Online (Sandbox Code Playgroud)
有人可以向我解释为什么答案是 4,3
(即,虽然我调用了super.increase()来调用超类中的upA方法,但是调用了子类方法?)
所有方法都被虚拟调用,覆盖应用.所以这段代码在F:
public void increase() {
upA();
}
Run Code Online (Sandbox Code Playgroud)
...正在调用G.upA(),因为它正在调用的对象upA()是一个实例G.
所以执行流程increase()是:
G.increase() 电话 super.increase()
F.increase() 电话 upA()G.upA() 执行(所以a = 4)G.increase() 电话 upB()
G.upB() 执行(所以b = 3)