一下是我的代码
class A {
void fun1() {
System.out.println(fun2());
}
int fun2() {
return 123;
}
}
class B extends A {
int fun2() {
return 456;
}
public static void main(String argv[]) {
A a;
B b = new B();
b.fun1();//子类创建自己对象,调用的是fun2()这个我知道.
a = b;//
a.fun1();//为什么多态中父类对象指向子类对象.调用的还是fun2();
}
}
求高人指点作者: 何建明 时间: 2014-3-11 14:54 本帖最后由 何建明 于 2014-3-11 15:02 编辑
a = b 这句以后, 实际上 后面的 a.fun1() 和上面的 b.fun1() 等同了。如果b.fun1() 明白了,下面就不用说咯。作者: 透过生活 时间: 2014-3-11 14:59
应该是父类引用指向子类对象吧。
建议,看看毕老师基础视频。作者: 房建斌 时间: 2014-3-11 15:01
A a;
B b = new B();
b.fun1();//这里是子类调用的还是从父类继承的方法。并非多态
a = b;//这里把子类的对象引用赋值给了父类引用。
a.fun1();//这里调用属于多态行为了。调用的还是从父类继承过来的fun1(),然后调用子类的fun2()作者: 张贺 时间: 2014-3-11 15:07
Java中的引用变量有两种类型:编译时类型和运行时类型,当两种类型不一致时,就有可能会发生多态。