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类的对象,所以结果同上。
我主要想问后面那个,是不是多态,这个类型很想,但我又不是很确定
看题得到答案是456 123的就不用说了,我用Eclipse运行得到的456 456 |
|