标题: 关于入学测试里的一道题目 [打印本页] 作者: luoyu1530 时间: 2015-8-13 23:49 标题: 关于入学测试里的一道题目 class A {
void fun1() {
System.out.println(fun2());
}
int fun2() {
return 123;
}
}
public class B extends A {
int fun2() {
return 456;
}
public static void main(String args[]) {
B b = new B();
b.fun1();
A a = b;
a.fun1();
}
}
这题答案是456 456
分析: B b = new B()创建了一个B类的对象,调用了fun1()方法。
但是在B类中没有fun1()方法,B继承了A,所以去A中找fun1()方法
A中的fun1()方法又调用了fun2()方法,但是B继承了A的时候将fun2()方法重写了,所以使用的是B的fun2()方法,结果打印了456
A a = b,这一步是其实是用了多态A a = new B();
所以在调用过程中,虽然创建的是A类的对象,但实际上使用的是B类的对象,所以结果同上。