这个问题是我自己的一个盲点问题,因为当我看到以下的代码以及选项的时候,我做出了错误的选择。后来,我知道了原因所在,但是我想应该会有很多不同的解释,特将问题列示如下。首先,先看一下代码:
public class Test
{
public static void main(String[] args) {
A ref1 = new C();
B ref2 = (B) ref1;
System.out.println(ref2.g());
}
}
class A {
private int f() {
return 0;
}
public int g() {
return 3;
}
}
class B extends A {
private int f() {
return 1;
}
public int g() {
return f();
}
}
class C extends B {
public int f() {
return 2;
}
}
public static void main(String[] args) {
A ref1 = new C();
B ref2 = (B) ref1;
System.out.println(ref2.g());
}
}
class A {
private int f() {
return 0;
}
public int g() {
return 3;
}
}
class B extends A {
private int f() {
return 1;
}
public int g() {
return f();
}
}
class C extends B {
public int f() {
return 2;
}
}
问题是:请问打印出来的是0,是1,是2,还是3?如果是ref1.g()的话,结果又是什么呢?也许问题很简单,还请各位不吝指教,谢谢!