黑马程序员技术交流社区
标题: 继承小问题 [打印本页]
作者: 由然自美 时间: 2013-12-28 21:01
标题: 继承小问题
本帖最后由 由然自美 于 2013-12-29 20:33 编辑
class A {
void fun1() {
System.out.println(fun2());
}
int fun2() {
return 123;
}
}
publicclass B extends A {
int fun2() {
return 456;
}
public static void main(String args[]) {
B b = new B();
b.fun1();
A a = b;
a.fun1();
}
}
这个可以运行吗?运行结果是多少?分析分析.
作者: 飞一样 时间: 2013-12-28 21:07
运行结果是466
作者: 飞一样 时间: 2013-12-28 21:08
之前那个发错了,运行结果是456,456
作者: 杨道红 时间: 2013-12-28 22:01
b.fun1()执行继承A类的fun1(),这时调出B类重写的fun2(),返回456
A a = b;其实是多态的表现,输出结果和上面的一样。也是456
作者: 刘汉文 时间: 2013-12-29 18:22
在多态中成员函数的特点:
在编译时期:参阅引用型变量所属的类中是否有调用的方法。如果有,编译通过,如果没有编译失败。
在运行时期:参阅对象所属的类中是否有调用的方法。
简单总结就是:成员函数在多态调用时,编译看左边,运行看右边。
在多态中,成员变量的特点:
无论编译和运行,都参考左边(引用型变量所属的类)。
在多态中,静态成员函数的特点:
无论编译和运行,都参考做左边。
作者: 克锋 时间: 2013-12-29 19:22
这就是方法的覆盖啊,亲~~,当然都是子类的实现了
作者: 浮出一个美 时间: 2013-12-29 20:22
要看调用的方法是子类的还是父类的,你直接看是谁的实例就行了。
子类的实例就调用子类的覆盖方法,即使左边的引用是父类的。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |